iPhone简单的电话号码验证

Ric*_*ick 7 iphone validation objective-c ios

我在iphone的stackoverflow上找到各种电话号码验证,但似乎都没有验证它们似乎只是改变了格式.示例电话号码格式.

目标:通过警报输入此号码.北美人有或没有破折号.

所以有一些代码,但每一件事都是无效的任何想法.

- (void)textFieldDidEndEditing:(UITextField *)textField {

NSString *str=@"^\\+(?:[0-9] ?){6,14}[0-9]$";
NSPredicate *no=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",str];
if([no evaluateWithObject:textField.text]==NO)
   { 

       UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Warning" message:@"Please Enter correct contact no." delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil];

       [alert show];
       [alert release];

   }
   else{
NSString *textValue = textField.text;
NSLog(@"Value: %@", textValue);
   }
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*pta 26

编辑:我再次阅读这个问题,看到你想要验证,而不是突出显示电话号码,所以我向上移动了部分NSDataDetector.

您可以使用NSDataDetector(这是一个专门的子类NSRegularExpression)来搜索电话号码NSString(我相信这使用iPhone的默认电话号码检测算法).

NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber
                                                           error:&error];
NSUInteger numberOfMatches = [detector numberOfMatchesInString:string
                                                       options:0
                                                         range:NSMakeRange(0, [string length])];
Run Code Online (Sandbox Code Playgroud)

如果您使用UITextView(但可能UITextField不像您在此处使用的那样),您可以使用iPhone的默认电话号码检测算法通过设置其属性来突出显示电话号码dataDetectorTypes:

textView.dataDetectorTypes = UIDataDetectorTypePhoneNumber;
Run Code Online (Sandbox Code Playgroud)

请参阅UIDataDetectorTypes其他类型的数据检测器.


Rob*_*ier 4

首先,真实的电话号码验证非常复杂。您是否仅限于 NANP(北美编号计划),还是正在寻找 E.164 号码?看起来您正在尝试主要匹配 E.164,尽管这通常不是大多数人会输入的数字。

您的匹配需要一个加号,后跟一系列长度在 7 到 15 之间的数字,数字之间可以有空格。你是这个意思吗?你传入什么字符串?

请注意,从 iOS4 开始,有NSRegularExpression一个比NSPredicate.

  • 你的正则表达式看起来一点也不像这样。里面连一个破折号都没有。为什么你相信它会起作用?在 http://regexlib.com 中搜索“NANP”可以找到许多与此相关的正则表达式。所有这些都有各种权衡。我建议对人类交给你的任何东西尽可能宽容。 (3认同)