ios开发正则表达式,正则表达式的实现原理
iOS常用正则表达式
好久没有更新了,发现好多简友还在不停的关注,感觉很对不起大家。现在对这篇正则进行下更新,修正下不对的地方。感谢大家的支持!
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的梨林网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
我们先对正则表达式语法做一个简单的说明,这样方便理解。网上关于正则的资料很多很多,我在这里只做下整理
我们先来举个例子分析一个可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等的表达式
表达式: \\(?0\d{2}[) -]?\d{8}
IOS开发 正则表达式
(?=.*\d)(?=.*[a-zA-Z])(?=.*[~`!@#$%^*()-_+={[}]|\\:;"',.?/])[\da-zA-Z~`!@#$%^*()-_+={[}]|\\:;"',.?/]{6,20}
iOS-问题:正则表达式转义字符:\
有如下正则表达式:
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间): ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$
使用如上正则表达式验证的时候发现没有达到自己想要的效果,那是因为上面的 \d 会被当成转义字符来对待,XCode警告 Unknown escape sequence '\d' ,如下:
最后po如上字符串的时候发现po出来的是 ^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$ ,少了 \ 正因为如此,所以正则的校验就不成功了。
解决办法,就是在 \d 前面再加个 \ ,不让他转义,如下:
这样正则的校验就正确了。
iOS开发,最新判断是否是手机号的正则表达式
// 判断是否是手机号
+ (BOOL)isValidPhone:(NSString *)phone
{
if (phone.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:phone];
NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU_NUM];
BOOL isMatch2 = [pred2 evaluateWithObject:phone];
NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT_NUM];
BOOL isMatch3 = [pred3 evaluateWithObject:phone];
if (isMatch1 || isMatch2 || isMatch3) {
return YES;
}else{
return NO;
}
}
}
网站标题:ios开发正则表达式,正则表达式的实现原理
浏览路径:http://myzitong.com/article/dsehghi.html