正则表达式-ios

作者: nenhall | 来源:发表于2016-12-07 21:48 被阅读7次

    正则表达式简单说明#

    语法: 匹配除换行符以外的任意字符 \w
    匹配字母或数字或下划线或汉字 \s
    匹配任意的空白符 \d
    匹配数字 \b
    匹配单词的开始或结束 ^
    匹配字符串的开始 $
    匹配字符串的结束 *
    重复零次或更多次 +
    重复一次或更多次 ?
    重复零次或一次 {n}
    重复n次 {n,}
    重复n次或更多次 {n,m}
    重复n到m次 \W
    匹配任意不是字母,数字,
    下划线,汉字的字符 \S
    匹配任意不是空白符的字符 \D
    匹配任意非数字的字符 \B
    匹配不是单词开头或结束的位置 [^x]
    匹配除了x以外的任意字符 [^aeiou]匹配除了aeiou这几个字母以外的任意字符 *?
    重复任意次,但尽可能少重复 +?
    重复1次或更多次,但尽可能少重复 ??
    重复0次或1次,但尽可能少重复 {n,m}?
    重复n到m次,但尽可能少重复 {n,}?
    重复n次以上,但尽可能少重复 \a
    报警字符(打印它的效果是电脑嘀一声) \b
    通常是单词分界位置,但如果在字符类里使用代表退格 \t
    制表符,Tab \r
    回车 \v
    竖向制表符 \f
    换页符 \n
    换行符 \e
    Escape \0nn
    ASCII代码中八进制代码为nn的字符 \xnn
    ASCII代码中十六进制代码为nn的字符 \unnnn
    Unicode代码中十六进制代码为nnnn的字符 \cN
    ASCII控制字符。比如\cC代表Ctrl+C \A
    字符串开头(类似^,但不受处理多行选项的影响) \Z
    字符串结尾或行尾(不受处理多行选项的影响) \z
    字符串结尾(类似$,但不受处理多行选项的影响) \G
    当前搜索的开头 \p{name}
    Unicode中命名为name的字符类,例如\p{IsGreek} (?>exp)
    贪婪子表达式 (?-exp)
    平衡组 (?im-nsx:exp)
    在子表达式exp中改变处理选项 (?im-nsx)
    为表达式后面的部分改变处理选项 (?(exp)yes|no)
    把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no (?(exp)yes) 同上,只是使用空表达式作为no (?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no (?(name)yes) 同上,只是使用空表达式作为no 捕获 (exp)
    匹配exp,并捕获文本到自动命名的组里 (?exp)
    匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
    (?:exp)
    匹配exp,不捕获匹配的文本,也不给此分组分配组号
    零宽断言
    (?=exp) 匹配exp前面的位置
    (?<=exp) 匹配exp后面的位置
    (?!exp) 匹配后面跟的不是exp的位置
    (?
    (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
    零宽断言
    (?=exp) 匹配exp前面的位置
    (?<=exp) 匹配exp后面的位置
    (?!exp) 匹配后面跟的不是exp的位置
    (?

    验证数字:^[0-9]$
    验证n位的数字:^\d{n}$
    验证至少n位数字:^\d{n,}$
    验证m-n位的数字:^\d{m,n}$
    验证数字和小数点:^[0-9]+([.]{0}|[.]{1}[0-9]+)$
    验证零和非零开头的数字:^(0|[1-9][0-9]
    )$
    验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
    验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
    验证非零的正整数:^+?[1-9][0-9]$
    验证非零的负整数:^-[1-9][0-9]
    $
    验证非负整数(正整数 + 0) ^\d+$
    验证非正整数(负整数 + 0) ^((-\d+)|(0+))$
    验证长度为3的字符:^.{3}$
    验证由26个英文字母组成的字符串:^[A-Za-z]+$
    验证由26个大写英文字母组成的字符串:^[A-Z]+$
    验证由26个小写英文字母组成的字符串:^[a-z]+$
    验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
    验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
    验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
    验证是否含有 ^%&',;=?$" 等字符:[^%&',;=?$\x22]+
    验证汉字:^[\u4e00-\u9fa5],{0,}$
    验证Email地址:^\w+[-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$
    验证InternetURL:^http://([\w-]+.)+[\w-]+(/[\w-./?%&=]
    )?$ ;^[a-zA-z]+://(w+(-w+))(.(w+(-w+)))(?S)?$
    验证电话号码:^((\d{3,4})|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
    验证电话号码及手机:(\d{3}-\d{8}|\d{4}-\d{7})|(^(((\d{3}))|(\d{3}-))?13\d{9}|15[89]\d{8}$)
    验证身份证号(15位或18位数字):^\d{15}|\d{}18$
    验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
    验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。
    整数:^-?\d+$
    非负浮点数(正浮点数 + 0):^\d+(.\d+)?$
    正浮点数 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
    非正浮点数(负浮点数 + 0) ^((-\d+(.\d+)?)|(0+(.0+)?))$
    负浮点数 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
    浮点数 ^(-?\d+)(.\d+)?$

    使用示例:#

    判断全汉字(这个问题苦恼了我很久,现在很方便,几行代码就搞定):
    if([selfdeptNameInputShouldChinese]) {
       [DemonAlertHelpershowToastWithMessage:@"只能是中文"];
       return;
    }
    调用这个方法就可
    
    #pragma mark--
    #pragma mark输入中文
    - (BOOL) deptNameInputShouldChinese
    {
    NSString*regex =@"[\u4e00-\u9fa5]+";
    NSPredicate*pred = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];
    if(![predevaluateWithObject:inputTextField.text]) {
    returnYES;
    }
    returnNO;
    }
    
    判断全数字:
    - (BOOL) deptNumInputShouldNumber
    {
    NSString*regex =@"[0-9]*";
    NSPredicate*pred = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];
    if(![predevaluateWithObject:inputTextField.text]) {
    returnYES;
    }
    returnNO;
    }
    
    判断全字母:
    - (BOOL) deptPassInputShouldAlpha
    {
    NSString*regex =@"[a-zA-Z]*";
    NSPredicate*pred = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];
    if(![predevaluateWithObject:inputTextField.text]) {
    returnYES;
    }
    returnNO;
    }
    
    判断仅输入字母或数字:
    - (BOOL) deptIdInputShouldAlphaNum
    {
    NSString*regex =@"[a-zA-Z0-9]*";
    NSPredicate*pred = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];
    if(![predevaluateWithObject:inputTextField.text]) {
    returnYES;
    }
    returnNO;
    }
    
    1.验证移动手机号:
    + (BOOL)valiMobile:(NSString *)mobile
    {
    mobile = [mobile stringByReplacingOccurrencesOfString:@" " withString:@""];
    if (mobile.length != 11)
    {
    return NO;
    }else{
    /**
    * 移动号段正则表达式
    */
    NSString *CM_NUM = @"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";
    
    /**
    * 联通号段正则表达式
    */
    NSString *CU_NUM = @"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$";
    
    /**
    * 电信号段正则表达式
    */
    NSString *CT_NUM = @"^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$";
    NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM_NUM];
    BOOL isMatch1 = [pred1 evaluateWithObject:mobile];
    NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU_NUM];
    BOOL isMatch2 = [pred2 evaluateWithObject:mobile];
    NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT_NUM];
    BOOL isMatch3 = [pred3 evaluateWithObject:mobile];
    if (isMatch1 || isMatch2 || isMatch3) {
    return YES;
    }else{
    return NO;
    }
    }
    }
    
    2.邮箱验证:
    + (BOOL)isEmail:(NSString*)email{
    NSString*regex =@"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$";
    NSPredicate*pred = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", regex];
    return[pred evaluateWithObject:email];
    }
    
    3.整形验证
    + (BOOL)isPureInt:(NSString*)string{
    NSScanner* scan = [NSScannerscannerWithString:string];
    intval;
    return[scan scanInt:&val] && [scan isAtEnd];
    }
    
    4.浮点型验证
    - (BOOL)isPureFloat:(NSString*)string{
    NSScanner* scan = [NSScannerscannerWithString:string];
    floatval;
    return[scan scanFloat:&val] && [scan isAtEnd];
    }
    
    5.中文验证
    + (BOOL)isChinese:(NSString*)chinese{
    NSString*regex =@"^[\u4e00-\u9fa5]";
    NSPredicate*pred = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", regex];
    return[pred evaluateWithObject: chinese];
    }
    
    6.网址URL验证
    + (BOOL)isURL:(NSString*)url{
    NSString*regex =@"[a-zA-z]+://[^\s]*";
    NSPredicate*pred = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", regex];
    return[pred evaluateWithObject: url];
    }
    
    7.身份证号验证(比较繁琐)
    +(BOOL)verifyIDCardNumber:(NSString *)IDCardNumber { IDCardNumber = [IDCardNumber stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
     if ([IDCardNumber length] != 18) {
     return NO;
     } 
    NSString *mmdd = @”(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8])))”; 
    NSString *leapMmdd = @”0229”; 
    NSString *year = @”(19|20)[0-9]{2
    }”; 
    NSString *leapYear = @”(19|20)(0[48]|[2468][048]|[13579][26])”; NSString *yearMmdd = [NSString stringWithFormat:@”%@%@”, year, mmdd]; 
    NSString *leapyearMmdd = [NSString stringWithFormat:@”%@%@”, leapYear, leapMmdd]; 
    NSString *yyyyMmdd = [NSString stringWithFormat:@”((%@)|(%@)|(%@))”, yearMmdd, leapyearMmdd, @”20000229”]; 
    NSString *area = @”(1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5]|82|[7-9]1)[0-9]{4}”; 
    NSString *regex = [NSString stringWithFormat:@”%@%@%@”, area, yyyyMmdd , @”[0-9]{3}[0-9Xx]”];
    NSPredicate *regexTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    if (![regexTest evaluateWithObject:IDCardNumber]){
    return NO;
    }
    int summary = ([IDCardNumber substringWithRange:NSMakeRange(0,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(10,1)].intValue) *7+([IDCardNumber substringWithRange:NSMakeRange(1,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(11,1)].intValue) *9+([IDCardNumber substringWithRange:NSMakeRange(2,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(12,1)].intValue) *10+([IDCardNumber substringWithRange:NSMakeRange(3,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(13,1)].intValue) *5+([IDCardNumber substringWithRange:NSMakeRange(4,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(14,1)].intValue) *8+([IDCardNumber substringWithRange:NSMakeRange(5,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(15,1)].intValue) *4+([IDCardNumber substringWithRange:NSMakeRange(6,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(16,1)].intValue) *2+[IDCardNumber substringWithRange:NSMakeRange(7,1)].intValue*1 + [IDCardNumber substringWithRange:NSMakeRange(8,1)].intValue *6+[IDCardNumbersubstringWithRange:NSMakeRange(9,1)].intValue *3;
    NSInteger remainder = summary % 11;NSString *checkBit = @"";
    NSString *checkString = @"10X98765432";checkBit = [checkString substringWithRange:NSMakeRange(remainder,1)];// 判断校验位return [checkBit isEqualToString:[[IDCardNumber substringWithRange:NSMakeRange(17,1)] uppercaseString]];
    }
    
    8.一般用户名的验证
    + (BOOL) isUserName:(NSString*)name{
    NSString*userNameRegex =@"^[A-Za-z0-9]{6,20}+$";
    NSPredicate*userNamePredicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",userNameRegex];
    return [userNamePredicate evaluateWithObject:name];
    }
    
    部份引用链接:[id]:http://www.jianshu.com/p/35865204d037  
    http://www.jianshu.com/p/13774c6bbdaa

    相关文章

      网友评论

        本文标题:正则表达式-ios

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