用于在 Swift 中为 UITextField 验证 Civil ID 的正则表达式 [重复]

Posted

技术标签:

【中文标题】用于在 Swift 中为 UITextField 验证 Civil ID 的正则表达式 [重复]【英文标题】:Regex for validating the Civil ID in Swift for the UITextField [duplicate] 【发布时间】:2017-05-19 10:45:06 【问题描述】:

我有一个格式如下的 UITextfield。这是我们通常在海湾国家看到的公民身份证。所以我需要在 Swift 的 UITextfield 中验证相同的内容。

Civil ID 格式 - NYYMMDDNNNNN 其中 N 一个数字,YY 出生年份的最后两位数字,MM 出生月份,DD 出生日期..

请告诉我如何对此进行验证。

【问题讨论】:

【参考方案1】:

这里是一个如何使用正则表达式的例子

var civilID = "4 88 05 20 8787"
var isValidCivilID: Bool 
    do 
        // the first 0 (?!00) checks that the numbers should not be all zero and d2 it should have 2 digigts remember it's simple you can make it much complex
        // also if you want space in between or not
        let regex = try NSRegularExpression(pattern: "\\d1 (?!00)\\d2 (?!00)\\d2 (?!00)\\d2 (?!0000)\\d4", options: .caseInsensitive)
        return regex.firstMatch(in: civilID, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, civilID.characters.count)) != nil
     catch 
        return false
    

如果您没有再次检查格式,则删除正则表达式中的空格,如果civilID正确填写,它将返回true,否则返回false

如果您想在字符串扩展中添加这些检查并阅读更多内容,请参阅此链接Swift Extensions, extending Strings

【讨论】:

我猜它不工作 你是否也尝试在链接中阅读 我认为正则表达式不正确......我得到了错误的回报,而且我需要检查“4 88 05 20 8787”中的 88 05 20 是否采用 yymmdd 格式。 请查看并澄清错误并发布正确答案。 在开头添加这两个斜线,我错过了\\d1

以上是关于用于在 Swift 中为 UITextField 验证 Civil ID 的正则表达式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Swift 中获取 UITextField 的 .text 属性 - 错误:“实例成员 'textFieldName' 不能用于类型 'ViewController'

在 Swift 中显示 UITextField 的底部边框不适用于约束。

UISearchbar 在 Swift 4 中使用 UItextfield

如何在 swift 中为一个文本字段禁用 DatePicker 交互(用于选择日期)“

Swift - 如何从 UIPickerView 生成数据的许多 UITextField 中读取数据 [关闭]

在 Swift 项目中为生产禁用 NSLog