正则表达式判断手机号码
使用方法:新建一个继承于NSString的类,再导入NSString+Check.h头文件,通过判断字符串的属性值(checkPhoneNumInput)YES or NO 即可。
#import
@interface NSString (Check)
-(BOOL)checkPhoneNumInput;
@end
// NSString+Check.m
// ics
//
// Created by Casystar on 15-4-2.
// Copyright (c) 2015年 dong. All rights reserved.
//
#import "NSString+Check.h"
@implementation NSString (Check)
-(BOOL)checkPhoneNumInput{
NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9]|70|77)\\d{8}$";
NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$";
NSString * CU = @"^1(3[0-2]|5[256]|8[56])\\d{8}$";
NSString * CT = @"^1((33|53|8[09])[0-9]|349)\\d{7}$";
// 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];
BOOL res1 = [regextestmobile evaluateWithObject:(需要判断字符串)];
BOOL res2 = [regextestcm evaluateWithObject:(需要判断字符串)];
BOOL res3 = [regextestcu evaluateWithObject:(需要判断字符串)];
BOOL res4 = [regextestct evaluateWithObject:(需要判断字符串)];
if (res1 || res2 || res3 || res4 )
{
return YES;
}
else
{
return NO;
}
}
@end
ps:1(3[0-9]|5[0-35-9]|8[025-9]|70|77),后面一部分是:\\d{8}。后面一部分很简单就不解释了,前面一部分我们分析一下。前面的1表示开头必须是1,接着是小括号里的式子(3[0-9]|5[0-35-9]|8[025-9]|70|77)。小括号了有四个"|"符号,这个符号我们理解为将式子分为了五部分:3[0-9],5[0-35-9],8[025-9],70,77。接下看一下每个部分表示什么:(我们这里用x表示未知数)
3[0-9]:就是表示匹配3x这样子的数字,x就是【0到9】之间的一个数字,包括0和9;
5[0-35-9]:这里表示匹配5x这样子的数字,x就是【0到3】或者是【5到9】之间的一个数字;
8[025-9]:这里表示匹配8x这样的数字,x就是【0】或者是【2】或者是【5到9】之间的一个数字;
70:表示要匹配70;
77:表示要匹配77;
这五部分因为是在一个小括号中,而且使用了"|"符号来分割,也就是说,这五部分里,我们只需要匹配到其中一个部分就行了。在加上一开始要匹配的数字1,也就是我们的表倒是开头的这部分可以匹配到的数字有:130....139,150...153,155...159,180,182,185...189,170,177。