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

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;
  }
}
时间: 2016-05-08

iOS开发验证判断语句之正则表达式小结

前言 大家都知道开发一直离不开一些常用验证格式,比如:邮箱,手机号等等,在开发过程中一般都会新建一个工具类,专门管理这些验证方式,简便开发过程.一般都采用正则表达式的形式来做判断,本文列举一些项目中非常实用的一些正则表达式的判断语句,以后开发起来直接复制粘贴就可以,这样大大节省了开发时间,下面不多说,直接上代码. 一.验证移动手机号: + (BOOL)isMobile:(NSString*)mobile { NSString *regex = @"^1+[34578]+\d{9}";

iOS验证手机号的正则表达式

本文实例为大家分享了iOS正则验证手机号的代码片段,供大家参考,具体内容如下 //判断手机号码格式是否正确 + (BOOL)valiMobile:(NSString *)mobile { mobile = [mobile stringByReplacingOccurrencesOfString:@" "withString:@""]; if (mobile.length != 11) { return NO; }else{ /** * 移动号段正则表达式 */ NS

IOS开发常用的正则表达式

正则表达式是一种用来进行文本匹配的工具,其语法优美简洁.在开发中,查找.对比以及匹配字符串是家常便饭的业务,通过正则表达式我们将这些业务描述成某些需求规则,来让我们的代码更美观.实用.例如我们要验证用户输入的密码长度是否满足6~18位的长度,新手最常见的验证方式是判断输入的密码长度 return (textField.text.length >= 6 && textField.text.leng <= 18); 尽管这种判断方式没有任何问题,而上面的验证换做正则表达式的匹配字符

正则表达式在IOS中的应用及IOS中三种正则表达式的使用与比较

正则表达式在ios中应用 一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式达到字符串的复杂控制. 二.正则表达式的语法 看一个过滤纯数字的例子 - (BOOL)validateNumber:(NSString *) textString { NSString* number=@"^[0-9]+$"; NSPredicate *numbe

iOS中正则表达式的运用示例代码

前言 有时我们需要在一大段长文本中过滤出我们需要的字段,或者检验该文本是否符合要求(该文本是否是邮箱,链接,电话号码或身份证),这时候就需要用到正则表达式了,iOS中也加入了相关的类来支持正则表达式的使用.本文详细介绍了关于iOS正则表达式运用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.NSRegularExpression 1. 正则表达式的创建 + (nullable NSRegularExpression *)regularExpressionWith

iOS中使用正则表达式NSRegularExpression 来验证textfiled输入的内容

何谓正则表达式 正则表达式(regular expression),在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的.正则表达式通常缩写成"regex",单数有regexp.regex,复数有regexps.regexes.regexen. 正则表达式组成 正则表达式有两种类型的字符

iOS 正则表达式判断手机号码、固话

话不多说,请看代码: { if (mobileNum.length != 11) { return NO; } /** * 手机号码: * 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[6, 7, 8], 18[0-9], 170[0-9] * 移动号段: 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705 * 联通号段: 130

iOS正则表达式验证手机号、邮箱、身份证号等

本文实例为大家分享了常用的iOS正则表达式,供大家参考,具体内容如下 #import "NSString+RegexCategory.h" @implementation NSString (RegexCategory) #pragma mark - 正则相关 - (BOOL)isValidateByRegex:(NSString *)regex{ NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF MATCH

iOS 正则表达式判断纯数字及匹配11位手机号码的方法

第一种使用正则表达式 判断 //是否是纯数字 + (BOOL)isNumText:(NSString *)str{ NSString * regex = @"(/^[0-9]*$/)"; NSPredicate * pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; BOOL isMatch = [pred evaluateWithObject:str]; if (isMatch)

iOS 中使用正则表达式判断身份证格式及银行卡号格式是否正确(推荐)

1.有时候我们会用到上传身份证号,或者银行卡号,这个时候就需要我们对身份证号以及银行卡号,进行基本的判断. 下面便是身份证号的判断返回YES是合法,反之不合法 #pragma mark 判断身份证号是否合法 - (BOOL)judgeIdentityStringValid:(NSString *)identityString { if (identityString.length != 18) return NO; // 正则表达式判断基本 身份证号是否满足格式 NSString *regex2

详解IOS中文件路径判断是文件还是文件夹

详解IOS中文件路径判断是文件还是文件夹 方法1 + (BOOL)isDirectory:(NSString *)filePath { BOOL isDirectory = NO; [[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDirectory]; return isDirectory; } 方法2 + (BOOL)isDirectory:(NSString *)filePath { NSNum

iOS中常见正则表达式验证方法

在某些App应用里面需要填写用户信息(用于验证),有身份证.手机号.军官证等等.下面来跟大家分享一下各自的验证方式. 1.验证 手机号码 ,这个是对任意输入的一串数字做验证,返回一个识别结果(字符串),根据这个结果再做判断. //判断手机号码 + (NSString *)valiMobile:(NSString *)mobile{ if (mobile.length != 11){ return @"手机号码格式错误"; }else{ /** * 移动号段正则表达式 */ NSStri

asp.net中利用正则表达式判断一个字符串是否为数字的代码

复制代码 代码如下: publicstaticbool IsNumeric(string value) { return Regex.IsMatch(value, @"^[+-]?\d*[.]?\d*$"); } publicstaticbool IsInt(string value) { return Regex.IsMatch(value, @"^[+-]?\d*$"); } publicstaticbool IsUnsign(string value) { r

ios利用正则表达式判断手机号码格式是否正确的实例

实例如下: //判断手机号码格式是否正确 + (BOOL)valiMobile:(NSString *)mobile { mobile = [mobile stringByReplacingOccurrencesOfString:@" " withString:@""]; if (mobile.length != 11) { return NO; }else{ /** * 移动号段正则表达式 */ NSString *CM_NUM = @"^((13[4-

正则表达式验证身份证号码和邮箱、判断checked选中状态

项目中正好写到登录注册,在用blur事件验证用户输入内容的时候,出现了点bug,最后是在注册按钮onclick的事件里获取用户输入值来验证的. 判断checked选中状态: if(!$('#checkedAgree').prop("checked"){ console.log('no');//未选中 }else{ console.log('yes');//选中 } //注册 $(".regBtn").on('click',function(){ var regUse

IOS正则表达式判断输入类型(整理)

在开发过程中,有时需要对用户输入的类型做判断,最常见是在注册页面即用户名和密码,代码整理如下: 只能为中文 -(BOOL)onlyInputChineseCharacters:(NSString*)string{ NSString *zhString = @"[\u4e00-\u9fa5]+"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",zhString]

IOS中用正则表达式判断输入的内容为8-16位且同时包含数字和字母

今天在项目中需要用到判断用户输入的用户名长度为8-16位且同时包含数字和字母,在网上搜了一下正则表达式的用法,然后参考这篇文章,完美解答了问题.记录一下: 密码有如下要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间. 如何分析需求?拆分!这就是软件设计的一般思路了.于是乎,拆分需求如下: 1,不能全部是数字 2,不能全部是字母 3,必须是数字或字母 只要能同时满足上面3个要求就可以了,写出来如下: ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z