2

我只想有 13 个数值或 13 个数值可以以“+”sysmbol 为前缀。所以 + 不是必需的示例:1234567891234 另一个示例是:+1234567891234

电话号码格式应该是国际的,iPhone中是否有用于电话号码验证的正则表达式

我已经尝试了上面的链接,但是这个 +1234545 但我只想有 13 个数字或 + 可以用这 13 个数字作为前缀。

请告诉我,我可以在这里更改什么

这是我试过的代码

NSString * forNumeric = @"^\\+(?:[0-9] ?){6,14}[0-9]$";

    BOOL isMatch = [[textFieldRounded text] isMatchedByRegex:forNumeric];

    if (isMatch == YES){

        NSLog(@"Matched");
    }
    else {
        NSLog(@"Not matched");
    }
4

6 回答 6

4
    NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})";

前导0或前导+44已经找到一次了,为什么还要再找呢?

基本简化导致

    NSString * regex = @"((07|00440?7|\\+440?7)\\d{9})";

然后到

    NSString * regex = @"((07|(00|\\+)440?7)\\d{9})";

然后到

    NSString * regex = @"((0|(00|\\+)440?)7\\d{9})";

但 00 不是唯一常见的拨号前缀,011 用于美国和加拿大。

加上这一点,并扭转订单,给出:

    NSString * regex = @"(^((0(0|11)|\\+)440?|0)7\\d{9}$)";

或者最好

    NSString * regex = @"(^(?:(?:0(?:0|11)|\\+)(44)0?|0)(7\\d{9}$))";

允许 00447, 011447, +447, 004407, 0114407, +4407, 07 开头,并且带有非捕获组。

对于更广泛的输入格式匹配,允许使用各种标点符号(连字符、括号、空格)

    NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7\\d{9})$)";

提取 $1 中的 44 个国家/地区代码(如果输入数字为 07...则为空)和 $2 中的 10 位 NSN。

但是请注意,以 070 和 076 开头的号码(07624 除外)不是手机号码。

最终图案:

    NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7([1-5789]\\d{2}|624)\\)?[\\s-]?\\d{6}))$)";

提取 $2 中的 NSN,然后从中删除所有非数字以进行进一步处理。

于 2012-11-06T09:16:56.230 回答
1
NSDataDetector *matchdetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber
                                                                error:&error];
NSUInteger matchNumber = [matchdetector numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])];

如果你使用UITextField那么:

textField.dataDetectorTypes = UIDataDetectorTypePhoneNumber;
于 2012-01-25T09:55:31.590 回答
1

这个怎么样?

NSString *forNumeric = @"\\+?[0-9]{6,13}";
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@"self matches %@", forNumeric];
BOOL isMatch = [predicate evaluateWithObject:@"+1234567890123"];

if (isMatch) NSLog(@"Matched");
else NSLog(@"Not matched");
于 2012-01-25T10:15:30.037 回答
1

^(\+?)(\d{13})$应该做的伎俩,为objective-C使用转义斜线。13 位数字,带有选项+前缀。

如果你想玩正则表达式,你可以使用像这样的服务来提供视觉反馈,非常方便。

NSString * forNumeric = @"^(\\+?)(\\d{13})$";
于 2012-01-25T10:18:01.480 回答
0

您可以尝试使用 NSDataDetector:

http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSDataDetector_Class/Reference/Reference.html

在 iOS4+ 中可用

于 2012-01-25T09:46:42.160 回答
0

以下是我为验证英国手机号码所做的工作:

- (BOOL) isValidPhoneNumber
{
    NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})";
    NSPredicate *testPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
    BOOL validationResult = [testPredicate evaluateWithObject: self];
    return validationResult;
}

看看对你有没有帮助

于 2012-01-25T10:12:49.860 回答