广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    iOS App开发中Objective-C使用正则表达式进行匹配的方法

    2018-04-07 07:49:32 次阅读 稿源:互联网
    广告

    iOS中有三种方式来实现正则表达式的匹配。现在将他们都记录在这里:

    1.利用NSPredicate(谓词)匹配
    例如匹配有效邮箱:

    NSString *email = @“nijino_saki@163.com”; NSString *regex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+//.[A-Za-z]{2,4}"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; BOOL isValid = [predicate evaluateWithObject:email];

    谓词匹配比较灵活,但是需要有谓词的相关知识。

    2.利用rangeOfString:option:直接查找

    NSString *searchText = @"// Do any additional setup after loading the view, typically from a nib.";  NSRange range = [searchText rangeOfString:@"(?:[^,])*//." options:NSRegularExpressionSearch];  if (range.location != NSNotFound) {   NSLog(@"%@", [searchText substringWithRange:range]); }

    options中设定NSRegularExpressionSearch就是表示利用正则表达式匹配,会返回第一个匹配结果的位置。

    3.使用正则表达式类

    NSString *searchText = @"// Do any additional setup after loading the view, typically from a nib.";  NSError *error = NULL;NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?:[^,])*//." options:NSRegularExpressionCaseInsensitive error:&error];NSTextCheckingResult *result = [regex firstMatchInString:searchText options:0 range:NSMakeRange(0, [searchText length])];if (result) {  NSLog(@"%@/n", [searchText substringWithRange:result.range]);}

    使用系统的正则表达式类(NSRegularExpression)会返回匹配的多个结果。

    实例:
    1.验证邮箱

    + (BOOL)validateEmail:(NSString *)email{  NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+//.[A-Za-z]{2,4}";  NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];  return [emailTest evaluateWithObject:email];}

    NSPredicate是一个Foundation类,是用来查询的,原理和用法都类似于SQL中的where。

    2.验证手机号

    简单的判断方法

    + (BOOL)validatePhone:(NSString *)phone{  NSString *phoneRegex = @"1[3|5|7|8|][0-9]{9}";  NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];  return [phoneTest evaluateWithObject:phone];}

    这只是简单地判断手机号格式。其实手机的格式还是有一点复杂的。

    详细的判断方法

    //正则判断手机号码格式+ (BOOL)validatePhone:(NSString *)phone{    /**    * 手机号码    * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188    * 联通:130,131,132,152,155,156,185,186    * 电信:133,1349,153,180,189    */    NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9])//d{8}$";    /**         * 中国移动:China Mobile         * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188         */    NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])//d)//d{7}$";    /**         * 中国联通:China Unicom         * 130,131,132,152,155,156,185,186         */    NSString * CU = @"^1(3[0-2]|5[256]|8[56])//d{8}$";    /**         * 中国电信:China Telecom         * 133,1349,153,180,189         */    NSString * CT = @"^1((33|53|8[09])[0-9]|349)//d{7}$";    /**         * 大陆地区固话及小灵通         * 区号:010,020,021,022,023,024,025,027,028,029         * 号码:七位或八位         */   // NSString * PHS = @"^0(10|2[0-5789]|//d{3})//d{7,8}$";   NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];   NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];   NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];   NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];  if (([regextestmobile evaluateWithObject:phone] == YES)  || ([regextestcm evaluateWithObject:phone] == YES)  || ([regextestct evaluateWithObject:phone] == YES)  || ([regextestcu evaluateWithObject:phone] == YES))  {    if([regextestcm evaluateWithObject:phone] == YES) {     NSLog(@"China Mobile");    } else if([regextestct evaluateWithObject:phone] == YES) {     NSLog(@"China Telecom");    } else if ([regextestcu evaluateWithObject:phone] == YES) {     NSLog(@"China Unicom");    } else {     NSLog(@"Unknow");    }    return YES;  }  else   {    return NO;  }}

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告