最近项目里的有一些输入文字需要判断,需求又弄得人比较烦,所以决定用正则写,关于swift正则的文章很少,所以就贴出我最近用到的。
代码如下
// MARK: - String类型的拓展extension String{ /// 身份证正则 /// /// - Returns: true or false /// 身份证号的需求给出的是最后一位可以为大写的X英文字母,但是我发现即使改变options:的值,也没有区分,所以做了一个小写x返回false的判断。如果有人知道这个怎么处理,希望能留言给我,谢谢。 func IsLegalForIDCardNumber()->Bool{ if self.characters.last == "x"{ return false } var result = "" // - 1、创建规则 let pattern1 = "(^[0-9]{15}$)|([0-9]{17}([0-9]|[X])$)" // let pattern1 = "^[a-zA-Z\\u4e00-\\u9fa5][a-zA-Z0-9\\u4e00-\\u9fa5]$" // - 2、创建正则表达式对象 let regex1 = try! NSRegularExpression(pattern: pattern1, options: NSRegularExpression.Options.caseInsensitive) // - 3、开始匹配 let res = regex1.matches(in: self, options: NSRegularExpression.MatchingOptions.init(rawValue: 0), range: NSMakeRange(0, self.characters.count)) // 输出结果 for checkingRes in res { result = result + (self as NSString).substring(with: checkingRes.range) } if result == self{ return true }else{ return false } } /// 银行卡号正则 /// /// - Returns: true or false func IsLegalForBankCardNumber()->Bool{ for char in self.characters{ if char == "_"{ return false } } var result = "" // - 1、创建规则 let pattern1 = "[0-9]{15,18}" // let pattern1 = "^[a-zA-Z\\u4e00-\\u9fa5][a-zA-Z0-9\\u4e00-\\u9fa5]$" // - 2、创建正则表达式对象 let regex1 = try! NSRegularExpression(pattern: pattern1, options: NSRegularExpression.Options.caseInsensitive) // - 3、开始匹配 let res = regex1.matches(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count)) // 输出结果 for checkingRes in res { result = result + (self as NSString).substring(with: checkingRes.range) } if result == self{ return true }else{ return false } } /// 手机号正则 /// /// - Returns: true or false func IsLegalForPhoneNumber()->Bool{ for char in self.characters{ if char == "_"{ return false } } var result = "" // - 1、创建规则 let pattern1 = "1[0-9]{10}" // let pattern1 = "^[a-zA-Z\\u4e00-\\u9fa5][a-zA-Z0-9\\u4e00-\\u9fa5]$" // - 2、创建正则表达式对象 let regex1 = try! NSRegularExpression(pattern: pattern1, options: NSRegularExpression.Options.caseInsensitive) // - 3、开始匹配 let res = regex1.matches(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count)) // 输出结果 for checkingRes in res { result = result + (self as NSString).substring(with: checkingRes.range) } if result == self{ return true }else{ return false } } }
说一下手机号的正则格式let pattern1 = "1[0-9]{10}"
双引号里的1就是第一位必须是1,后续的[0-9]就是纯数字的意思,{10}就是重复10次。10次加上第一位必须为1就是11位手机号的判断。
贴上网上找到的比较好的正则讲解
- 几乎所有的程序设计语言都支持正则表达式,例如:OC,java,c#,python,js等- 在很多文本编辑器里,可以使用正则表达式进行检索,Xcode同样支持正则表达式! 正则表达式的用处: 1. 判断给定的字符串是否符合某一种规则(专门用于操作字符串) > 电话号码,电子邮箱,URL... 可以直接百度别人写好的正则 1> 别人真的写好了,而且测试过了,我们可以直接用 2> 要写出没有漏洞正则判断,需要大量的测试,通常最终结果非常负责 2. 过滤筛选字符串,网络爬虫 3. 替换文字,QQ聊天,图文混排 0> 匹配 -------------------------------------------------------------------------------- (pattern) 匹配pattern并获取这一匹配,所获取的匹配可以从产生的Matches集合得到 1> 集合 -------------------------------------------------------------------------------- [xyz] 字符集合(x/y或z) [a-z] 字符范围 [a-zA-Z] [^xyz] 负值字符集合 (任何字符, 除了xyz) [^a-z] 负值字符范围 [a-d][m-p] 并集(a到d 或 m到p) 2> 常用元字符 -------------------------------------------------------------------------------- . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 [a-zA-Z_0-9] \s 匹配任意的空白符(空格、TAB\t、回车\r \n) \d 匹配数字 [0-9] ^ 匹配字符串的开始 $ 匹配字符串的结束 \b 匹配单词的开始或结束 2> 常用反义符 -------------------------------------------------------------------------------- \W 匹配任意不是字母,数字,下划线,汉字的字符[^\w] \S 匹配任意不是空白符的字符 [^\s] \D 匹配任意非数字的字符[^0-9] \B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符 4> 常用限定符 -------------------------------------------------------------------------------- * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次, 5> 贪婪和懒惰 -------------------------------------------------------------------------------- *? 重复任意次,但尽可能少重复 *+ 重复1次或更多次,但尽可能少重复 ?? 重复0次或1次,但尽可能少重复 {n,m}? 重复n到m次,但尽可能少重复 {n,}? 重复n次以上,但尽可能少重复
有关正则表达式,如有不对可以留言交流,互勉。
作者:Bart_Simpson
链接:https://www.jianshu.com/p/be58f4c7f68f
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦