Objective-c正则表达式检查电话号码

Objective-c regex to check phone number

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
A comprehensive regex for phone number validation

如何在objective-c中验证电话号码(NSString *)?规则:

  • 最少7位数
  • 最多10位数
  • 第一个数字必须是2,3,5,6,8或9

谢谢


您可以使用正则表达式库(如RegexKit等),也可以通过NSPredicate使用正则表达式(有点模糊,但不需要第三方库)。这看起来像这样:

1
2
3
4
NSString *phoneNumber = ...;
NSString *phoneRegex = @"[235689][0-9]{6}([0-9]{3})?";
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
BOOL matches = [test evaluateWithObject:phoneNumber];

如果你在iPhone上,那么iOS 4引入了NSRegularExpression,这也可以。 NSPredicate方法适用于Mac和iPhone(任何版本)。


请不要将自己的正则表达式用于电话号码。别。

电话号码的格式在全国范围内有所变化,您的应用可能会在您所在国家/地区之外使用。

相反,使用Apple提供的东西,正如Josh所说。看这里。


对于那些搜索电话提取的人,您可以从文本中提取电话号码,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
NSString *userBody = @"This is a text with 30612312232 my phone";
if (userBody != nil) {
    NSError *error = NULL;
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber error:&error];
    NSArray *matches = [detector matchesInString:userBody options:0 range:NSMakeRange(0, [userBody length])];
    if (matches != nil) {
        for (NSTextCheckingResult *match in matches) {
            if ([match resultType] == NSTextCheckingTypePhoneNumber) {
                DbgLog(@"Found phone number %@", [match phoneNumber]);
            }
        }
    }
}

`


iOS 4.0及更高版本中提供的NSDataDetector类是NSRegularExpression的专用子类,它明确支持检测电话号码。


在iOS 4.0+中有内置类来执行此操作,NSRegularExpression

在其他任何事情中,您可以使用第三方RegEx库,或者如果您的需求足够窄,则使用NSPredicate