iOS正则表达式

正则表达式简单说明#

语法: 匹配除换行符以外的任意字符 \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的位置
(?

验证数字:[1]\( 验证n位的数字:^\d{n}\)
验证至少n位数字:^\d{n,}\( 验证m-n位的数字:^\d{m,n}\)
验证数字和小数点:[2]+([.]{0}|[.]{1}[0-9]+)\( 验证零和非零开头的数字:^(0|[1-9][0-9]*)\)
验证有两位小数的正实数:[3]+(.[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个大写英文字母组成的字符串:[4]+\( 验证由26个小写英文字母组成的字符串:^[a-z]+\)
验证由数字和26个英文字母组成的字符串:[5]+\( 验证由数字、26个英文字母或者下划线组成的字符串:^\w+\)
验证用户密码:[6]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有 ^%&',;=?\(\" 等字符:[^%&',;=?\)\x22]+
验证汉字:[7],{0,}\( 验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\)
验证InternetURL:^http://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$ ;[8]+://(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

  1. 0-9 ↩︎

  2. 0-9 ↩︎

  3. 0-9 ↩︎

  4. A-Z ↩︎

  5. A-Za-z0-9 ↩︎

  6. a-zA-Z ↩︎

  7. \u4e00-\u9fa5 ↩︎

  8. a-zA-z ↩︎

posted @ 2020-07-02 09:59  nenhall/浩哥哥  阅读(139)  评论(0编辑  收藏  举报