验证电话号码

验证电话号码

问题描述:

我想有仅13的数字值或13numeric值可以用“+”为前缀的sysmbol.so +不是强制性 示例:1234567891234 另一个例子是:1234567891234验证电话号码

Telephone number format should be international,Is there any Regex for phone number validation in iPhone

我已经尝试了上面的链接,但是这个+1234545但我想只有13个numarals或+可以用13个数字作为前缀。

请让我知道,我可以在这里

改变它,这个是我试图

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

    BOOL isMatch = [[textFieldRounded text] isMatchedByRegex:forNumeric]; 

    if (isMatch == YES){ 

     NSLog(@"Matched"); 
    } 
    else { 
     NSLog(@"Not matched"); 
    } 
+0

不可能使用正则表达式吗?请让我知道 – user198725878

^(\+?)(\d{13})$应该做的伎俩,逃避客观C使用斜线。 13位数字,带有选项+前缀。

如果你想玩正则表达式,你可以使用像this one这样的服务进行视觉反馈,非常方便。

NSString * forNumeric = @"^(\\+?)(\\d{13})$"; 
+1

在这种情况下,用户必须输入一个13位数字。如果我们希望用户输入小于13的数字,可以做些什么?也许9-10位数字。 – ScarletWitch

+3

'NSString * forNumeric = @“^(\\ +?)(\\ d {a,b})$”;“ 只需将a和b替换为您想要的包含范围,例如a = 9,b = 10。 –

+2

兄弟只需要一个简单的正则表达式。 – keni

NSDataDetector *matchdetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber 
                   error:&error]; 
NSUInteger matchNumber = [matchdetector numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])]; 

如果使用UITextField则:

textField.dataDetectorTypes = UIDataDetectorTypePhoneNumber;
+0

'dataDetectorTypes'不适用于文本字段。 – Nishant

以下是我用于验证英国手机号码做:

- (BOOL) isValidPhoneNumber 
{ 
    NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})"; 
    NSPredicate *testPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
    BOOL validationResult = [testPredicate evaluateWithObject: self]; 
    return validationResult; 
} 

看它是否有助于你

这个怎么样?

NSString *forNumeric = @"\\+?[0-9]{6,13}"; 
NSPredicate *predicate; 
predicate = [NSPredicate predicateWithFormat:@"self matches %@", forNumeric]; 
BOOL isMatch = [predicate evaluateWithObject:@"+1234567890123"]; 

if (isMatch) NSLog(@"Matched"); 
else NSLog(@"Not matched"); 

NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})"; 

已经找到了0领先或龙头+44一次,为什么再次搜索呢?

基本简化导致

NSString * regex = @"((07|00440?7|\\+440?7)\\d{9})"; 

然后

NSString * regex = @"((07|(00|\\+)440?7)\\d{9})"; 

然后

NSString * regex = @"((0|(00|\\+)440?)7\\d{9})"; 

但00不是唯一的共同拨号前缀,011在美国使用和加拿大。

并称,和轮转动的顺序,得到:

NSString * regex = @"(^((0(0|11)|\\+)440?|0)7\\d{9}$)"; 

或优选

NSString * regex = @"(^(?:(?:0(?:0|11)|\\+)(44)0?|0)(7\\d{9}$))"; 

允许00447,011447,447,004407,0114407,4407,07在开始,并与非捕获组。

对于较宽的输入格式匹配,允许不同的标点符号(连字符,括号,空格)使用

NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7\\d{9})$)"; 

提取$ 1的44个国家或地区代码(如果为空号输入为07 ...)和10数字为2美元的NSN。

但是,请注意,从070和076(除07624之外)开始的数字不是手机号码。

最终图案:

NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7([1-5789]\\d{2}|624)\\)?[\\s-]?\\d{6}))$)"; 

提取NSN在$ 2,则从中除去所有的非数字用于进一步处理。