5

我的电话号码格式是 (987) 786-5645。

- (BOOL)validatePhoneNumberWithString:(NSString*)phone
{
    NSString *pNRegex = @"[(0-9)]{3}+\\ +\\[0-9-]{3}+\\[0-9]{4}";
    NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex];
    return [PNTest evaluateWithObject:phone];
}

我正在使用上面的代码。

确切的正则表达式规则应该是什么?我能够找出数字和括号。

我应该用什么来检测右括号后的空格?

4

4 回答 4

3

用这个替换你的 pNRegex,

NSString *pNRegex = @"^(\\([0-9]{3}\\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$";

希望它可以帮助你。

于 2013-05-02T13:01:52.723 回答
3

也许更好的解决方案是去掉电话号码的所有非数字字符进行验证,这样你就只剩下一串数字了。

除非您对其输入非常严格,否则正则表达式很容易被破坏,并且由于世界各地的电话号码差异很大,这种方式将允许您支持任何电话号码,而无需创建非常复杂的正则表达式。

您可以使用这样的简单方法:

- (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber {
    NSCharacterSet *illegalCharacters = [NSCharacterSet characterSetWithCharactersInString:@" +()-"];
    return [[phoneNumber componentsSeparatedByCharactersInSet:illegalCharacters] componentsJoinedByString:@""];
}

所以而不是+1 (555) 123-4567

你只要比较一下15551234567。如果您将其存储在数据库中,您可能希望控制格式以在 UI 上显示,并且整数比较比大型数据集的字符串比较更快,因此您可以将其存储[sanitizedPhoneNumber intValue];在数据库中作为NSNumber

另一种使用简单正则表达式仅允许数字 0-9 的方法(来源):

- (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber {
    return [phoneNumber stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [phoneNumber length])];
}
于 2013-05-02T13:07:37.977 回答
1

检查这个它适用于您的格式,

如果你想给特殊的字符,比如空格,(,),那么在那个字符后面加上 //

    NSString *phone=@"(123)123-1234";
    NSString *pNRegex = @"\\([0-9]{3}\\)[0-9]{3}\\-[0-9]{4}";
    NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex];
    BOOL check=[PNTest evaluateWithObject:phone ];
    NSLog(@"%i",check);

运单:-

(123)123-1234  - check=1

(123123-1234   - check=0

(123) 123-1234 - check=0

如果你想在结束括号后给空间使用这个,

NSString *phone=@"(123) 123-1234";
    NSString *pNRegex = @"\\([0-9]{3}\\)\\ [0-9]{3}\\-[0-9]{4}";
    NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex];
    BOOL check=[PNTest evaluateWithObject:phone ];
    NSLog(@"%i",check);

运单:-

(123) 123-1234  - check=1

(123123-1234   - check=0

(123)123-1234 - check=0
于 2013-05-02T13:36:56.433 回答
1

使用这个表达式,它对我有用

NSString *pNRegex = @"\\([0-9]{3}\\) [0-9]{3}\\-[0-9]{4}";
于 2013-05-02T13:13:41.330 回答