【问题标题】:Objective-c regex to check phone number [duplicate]Objective-c正则表达式检查电话号码[重复]
【发布时间】:2011-03-21 22:33:47
【问题描述】:

可能重复:
A comprehensive regex for phone number validation

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

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

谢谢

【问题讨论】:

  • Objective-C 本身是一种极简语言,几乎没有为您做任何事情——当然不是正则表达式。说出您正在使用的库(Cocoa、Cocoa Touch、POC 等)更为相关。
  • 我的电话号码在英国以 0 开头,在国外以 +44 开头。

标签: objective-c regex cocoa-touch


【解决方案1】:

在 iOS 4.0+ 中有内置的类可以做到这一点,NSRegularExpression

在所有其他方面,您可以使用第 3 方 RegEx 库,如果您的需求足够狭窄,也可以使用 NSPredicate

【讨论】:

    【解决方案2】:

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

    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(任何版本)。

    【讨论】:

    • 我只需要一个人,不是吗:)
    • 它甚至不适用于整个美国,所以我认为 OP 的用例非常狭窄。
    • 是的,我正在寻找一个特定的狭窄用例。
    • “?”是什么意思? (phoneRegex 的最后一个字符)?
    • 表示最后一组中的“none or one”。从概念上讲,您可能会认为可选数字位于 10 位和 7 位电话号码的开头,但由于您对第一位数字有要求,因此最容易将最后三位称为可选数字。
    【解决方案3】:

    请不要使用您自己的正则表达式作为电话号码。不要

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

    正如 Josh 所说,使用 Apple 提供的功能。见here

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        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]);
                    }
                }
            }
        }
        

        `

        【讨论】:

        • 是否可以使用 NSDataDetector 提取国际格式的数字?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 1970-01-01
        • 2015-10-23
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 2013-08-05
        相关资源
        最近更新 更多