正则表达式-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的位置
(?

验证数字:^[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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容