【问题标题】:How to Validation phone number and -如何验证电话号码和 -
【发布时间】:2011-10-06 14:51:17
【问题描述】:

用于验证电话号码并包含 -

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

我必须使用 -

验证电话号码

示例 333-333-3333(这是有效数字)。

如何使用 - 自定义有效的正则表达式到电话号码

【问题讨论】:

标签: iphone objective-c ipad


【解决方案1】:

这取决于你想要的严格程度,这个正则表达式似乎不是特别严格。 这个正则表达式说:

  1. 从行首开始
  2. 匹配一个+(或者可能是 1 或 0),这看起来 模棱两可(但可能不取决于实施),因为 捕获括号:() 打破了\+? 的关系
  3. 可能放错了:
  4. 匹配任意数字0-9 1 或 0 次 6-14 次
  5. 然后一位数字0-9
  6. 然后行尾。

您还注意到,任何反斜杠都必须加倍...@"\\b" 用于单词边界。 您可能想尝试类似...

@"\\b[\\d]{3}\\-[\\d]{3}\\-[\\d]{4}\\b"
would I think match your example, but it wouldn't match
(555) 555 - 5555 or
555.555.5555 or
+44 1865  55555

【讨论】:

  • 我的示例是 555-555-5555 我可以采用数字 0 到 9 或 - 符号作为正则表达式。
  • [0-9] 并不意味着 0 through 9- 符号。像[0-9\-] 这样的东西会
  • @regular expresión 如果我使用 [0-9\-] 它允许我 000-999-0999- 如果我使用另一种格式 [0-9\@]它会让我 000@000@0000
  • @Grady Player 感谢重播,这对我的实施很有帮助。
【解决方案2】:

其他两个答案都可以,但在很大程度上都失败了:

  1. 它们没有国际化。它们不考虑区号或国家/地区代码或空格而不是连字符周围的括号。所有这些都是电话号码的有效排列。
  2. 它们很脆弱。如果有人不想输入区号怎么办?如果发生变化并且美国的所有电话号码突然增加了一个数字怎么办?你的代码会被破解吗?

这个问题的答案是让框架为你处理这个问题。在 iOS 4+ 和 OS X 10.7+ 上有一个名为 NSDataDetector 的类,您可以使用它来检测物理地址、电子邮件地址、链接、公交信息、电话号码等。

文档提供了如何使用它的示例。这是一个更好的解决方案,因为它是您不必维护的代码。它适用于世界任何地方。

【讨论】:

  • 我完全同意,但我不太了解 NSDataDetector,也不想谈论它的功能。我确实有一个问题要问,我知道你只是要问的人...... NSDataDetector 语言环境知道吗?或者当我将语言环境设置为 en-US 时,它是否会匹配来自英国的电话号码,文档并没有真正很好地指定班级的假设或能力。是否所有的权力都来自 NSTextCheckingResult?
【解决方案3】:

Obj-C 对此有 NSPredicate。我记得,您可以将这样的代码用于您的任务:

NSPredicate * Pred = [NSPredicate predicateWithFormat:@"SELF MATCHES '^\+(?:[0-9] ?){6,14}[0-9]$'"];    
bool ifYes = [Pred evaluateWithObject:_yourNSString]];

有关更多详细信息,请查看 Apple 文档。

如果您想找到合适的 reg.exp.,请使用一些库,例如:http://regexlib.com/DisplayPatterns.aspx?cattabindex=6&categoryId=7

【讨论】:

    【解决方案4】:

    正如@Dave DeLong 和 NSDataDetector 所提到的,只是建议另一种方式。 Apple 提供的最好和优雅的方式之一。 谁可能正在寻找实现,这里是代码sn-p。

    - (BOOL)applyPhoneValidation:(NSString*)theNumber
    {
        NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber error:NULL];
        NSArray *matches = [detector matchesInString:theNumber options:0 range:NSMakeRange(0, theNumber.length)];
        BOOL isValidNumber = (NSInteger)matches.count;
        return isValidNumber;
    }
    

    它会为有效的电话号码返回 1。

    干杯 桑杰

    【讨论】:

      【解决方案5】:

      //电话无格式:(000)000-0000

      -(BOOL)numberValidation:(NSString*)phoneString
      {
      
          NSString *phoneRegEx = @"\\([0-9]{3}\\)[0-9]{3}\\-[0-9]{4}";
      
          NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegEx];
      
          BOOL result=[phoneTest evaluateWithObject:phoneString];
         return result;
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-17
        相关资源
        最近更新 更多