【发布时间】:2011-10-06 14:51:17
【问题描述】:
用于验证电话号码并包含 -
@"^\+(?:[0-9] ?){6,14}[0-9]$"
我必须使用 -
验证电话号码示例 333-333-3333(这是有效数字)。
如何使用 - 自定义有效的正则表达式到电话号码
【问题讨论】:
-
您的用户是否会通过此代码拨打电话号码?如果不允许
#和*,则会显示但手机不会发起呼叫。
标签: iphone objective-c ipad
用于验证电话号码并包含 -
@"^\+(?:[0-9] ?){6,14}[0-9]$"
我必须使用 -
验证电话号码示例 333-333-3333(这是有效数字)。
如何使用 - 自定义有效的正则表达式到电话号码
【问题讨论】:
# 和*,则会显示但手机不会发起呼叫。
标签: iphone objective-c ipad
这取决于你想要的严格程度,这个正则表达式似乎不是特别严格。 这个正则表达式说:
+(或者可能是 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
【讨论】:
[0-9] 并不意味着 0 through 9 和 - 符号。像[0-9\-] 这样的东西会
其他两个答案都可以,但在很大程度上都失败了:
这个问题的答案是让框架为你处理这个问题。在 iOS 4+ 和 OS X 10.7+ 上有一个名为 NSDataDetector 的类,您可以使用它来检测物理地址、电子邮件地址、链接、公交信息、电话号码等。
文档提供了如何使用它的示例。这是一个更好的解决方案,因为它是您不必维护的代码。它适用于世界任何地方。
【讨论】:
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
【讨论】:
正如@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。
干杯 桑杰
【讨论】:
//电话无格式:(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;
}
【讨论】: