iOS正则表达式

作者: blackJokerZ | 来源:发表于2017-06-16 10:24 被阅读102次

    欢迎关注我的微博,一起学习进步

    timg.jpg

    写在前面

    一直在用正则表达式,基本上都是匹配国内手机号码、邮箱等,近期需要匹配其他国家电话、邮箱,正好自己研究一下正则表达式。
    正则表达式由原意字符和元字符构成(原意字符表达字符原有意思,元字符则表达规定的特殊意义)
    示例:^[0-9]+$
    上面就是一个完整的正则表达式,表示 一个只能由0到9(包含0和9)的数字 组成的至少一位的字符串,下面我们就来一起看一下正则表达式的基本用法。

    语法

    正则语法中最基础的表达式符号有以下四个

    ^ $ ** . ** [ ]
    指定字符串开头 指定字符串结尾 除 \r\n以外的 通配符 包含[]内的任意一个字符(至少1个)

    (\r :回车; \n:换行 )

    • ^one 表示一个以“abc”开始的字符串("one people","one dog");
      类似于-(BOOL) hasPrefix:(NSString *) astring;
    • dog$:表示所以以”dog”结尾的字符串("a good dog","a bad dog");
      类似于:- (BOOL)hasSuffix:(NSString *) aString;
    • ^iPhone& 表示有且只有这一个不重复的字段,
      相当于==
    • originalCharactor 单纯的原意字符表示包含该字符串,
      相当于- (BOOL)containsString:(NSString *) aString,
    • "." 也就是“点”,匹配任何单个字符(不包括回车换行) 1.a 1后面跟任意一个字符再跟一个a("1Qa","1@a","12a")
    • [ab]字符串中有一个a或b ("a","b") __ 注意区分 __^[ab]$这是一个为"a"或"b"的字符串
      [a-d]:表示一个字符串包含小写的'a'到'd'中的一个;
      ^[a-zA-Z]:表示一个以字母开头的字符串;
      [0-9]a:表示a前有一位的数字;
      [a-zA-Z0-9]$:表示一个字符串以一个字母或数字结束。
    { } * + ?
    {}前一字符出现次数由{}内数字决定 *前一字符出现 0-N次 +前一字符出现1-N次 ?前一字符出现0-1次

    ( ) 域段:可与其他字符结合使用,表示()内整个区域为一个整体

    • {}设置"{}"前一字符重复的具体范围。例如:
        “ab{4}”:字符串包含“一个a跟着4个b”(”abbbb”);
        “ab{1,}”:字符串包含“一个a跟着至少1个b”(”ab”,”abb”,”abbb”,……);
        “ab{2,5}”:表示一个字符串有一个a跟着2到5个b(”abb”,"abbb",”abbbb”,"abbbbb")。
    • ab*:字符串包含“一个a后面跟着0-N个b”("a", "ab", "abbb",……);
    • ab+:字符串包含“一个a后面跟着1-N个b”( "ab", "abbb",……);
    • ab?:字符串包含“一个a后面跟着0-1个b”( ”a”, “ab”);
    • 1(abc)* :字符串包含“1后跟着0个或若干个 abc ”("1","1abc","1abcabc",......);
      可以看出,*等价于{0,}+等价于{1,}?等价于{0,1}
      注:{}内可以没有上限,但是不能没有下限!例如“ab{,5}”是错误的写法

    等价

    由上文可以看出,在正则表达式中有些东西是等价的,等价是正则表达式中的重要概念,也是让初学者一脸懵逼的存在,但如果将等价恢复成原有语法记忆就比较简单了。

    ?,*,+,\d,\w 都是等价字符
    “ | ”表示“或”操作,在[]内第一位使用用'^'表示匹配除[]内的其他字符

    ?等价于匹配长度{0,1}
      *等价于匹配长度{0,}
      +等价于匹配长度{1,}
      \d等价于[0-9]
      \D等价于[^0-9] :匹配一个非数字字符("aabbcd","@#$abcd")
      \w等价于[A-Za-z_0-9]
      \W等价于[^A-Za-z_0-9] :匹配 非字母数字 的字符

    常用正则表达式

    • 匹配国内手机号
      正则表达式 ^1[3,4,5,7,8][0-9]{9}$(13/14/15/17/18开头,11位)
      iOS语法
      -(BOOL) validatePhoneNum:(NSString *) phoneNum { NSString *phoneRegex = @"^1[3,4,5,7,8][0-9]{9}$"; NSPredicate *phonePre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex]; return [phonePre evaluateWithObject:phoneNum]; }
    • 匹配邮箱
      正则表达式 ^[\w.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$
      iOS语法 参考手机号
    • 匹配QQ号码:^[1-9][0-9]{4,14}$(5~15位,不能以0开头,只能是数字)
    • 匹配身份证:(^[0-9]{15}$)|([0-9]{17}[0-9X]$)(15位或18位身份证,18位身份证末位可能为X)

    最后附上一个 在线正则表达式检查工具

    https://regex101.com/#javascript

    相关文章

      网友评论

        本文标题:iOS正则表达式

        本文链接:https://www.haomeiwen.com/subject/jaksqxtx.html