如何验证电话号码和 -

Posted

技术标签:

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

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

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

我必须使用 -

验证电话号码

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

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

【问题讨论】:

您的用户是否会通过此代码拨打电话号码?如果不允许#*,则会显示但手机不会发起呼叫。 IPhone simple phone number validation 的可能重复项 【参考方案1】:

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

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

您还注意到,任何反斜杠都必须加倍...@"\\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】:

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

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

这个问题的答案是让框架为你处理这个问题。在 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;


【讨论】:

以上是关于如何验证电话号码和 -的主要内容,如果未能解决你的问题,请参考以下文章

PayPal如何关闭登录验证码

如何使用交叉验证来确定使用训练、验证和测试集的最终模型

Lumen 如何验证用户和客户端

如何验证 Apple 登录的 Jwt 令牌(后端验证)。如何从 Java 中的模数和指数 (n,e) 生成 RSA 公钥

Laravel:如何使用验证规则之前和之后验证两个可选的日期字段

Sping POJO中如何添加验证规则和验证消息提示