如何验证电话号码和 -
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;
【讨论】:
以上是关于如何验证电话号码和 -的主要内容,如果未能解决你的问题,请参考以下文章
如何验证 Apple 登录的 Jwt 令牌(后端验证)。如何从 Java 中的模数和指数 (n,e) 生成 RSA 公钥