iPhone的简单电话号码验证
我发现iphone上的*的各种电话号码验证,但似乎没有任何验证,他们似乎只是改变格式。示例Phone number formatting。iPhone的简单电话号码验证
目标:通过警报输入此号码。北美有或没有破折号。
所以有一些代码,但是每件事情都会像任何想法一样无效。
- (void)textFieldDidEndEditing:(UITextField *)textField {
NSString *[email protected]"^\\+(?:[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);
}
}
首先,真正的电话号码验证相当复杂。您是否仅限于NANP(北美编号计划),还是您在寻找E.164号码?它看起来像你试图主要匹配E.164,但这通常不是大多数人会输入的数字。
您的匹配需要一个加号,然后是一个7到15之间的数字序列,并在它们之间有可选空格。你是这个意思吗?你传递了什么字符串?
请注意,从iOS4开始,有NSRegularExpression
这比NSPredicate
要好一些。
编辑:我再次读到这个问题,看到你想验证,不突出显示的电话号码,所以我搬上了NSDataDetector
的部分。
您可以使用NSDataDetector
(这是NSRegularExpression
一个专门的子类)在NSString
搜索电话号码(这使用iPhone的默认电话号码检测算法,我相信)。
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber
error:&error];
NSUInteger numberOfMatches = [detector numberOfMatchesInString:string
options:0
range:NSMakeRange(0, [string length])];
如果使用UITextView
(但可能不会UITextField
像你在这里使用),你可以亮点通过设置dataDetectorTypes
财产使用iPhone的默认电话号码检测算法的电话号码:
textView.dataDetectorTypes = UIDataDetectorTypePhoneNumber;
查看UIDataDetectorTypes
其他类型的数据检测器。
我试过NSDataDector,虽然我没有得到它的工作,我相信这将是一条路。当我有更多时间玩它时,我会将其更改为这种格式。谢谢 – Rick
NSDataDetector是如何失效的? –
嘿,为你做这个工作? –
使用此验证,您只能输入10个数字。您可以根据您的要求更改它的长度。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
BOOL valid = [[NSPredicate predicateWithFormat:@"SELF MATCHES %@", REGEX_FOR_INTEGERS] evaluateWithObject:_textFieldValidate.text];
if(valid){
if(range.length + range.location > textField.text.length)
{
return NO;
}
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return newLength <= 10;
}
return YES;
}
希望这会对你有帮助。
你真的不应该限制自己这种类型的验证 - 只需使用像numverify.com这样的免费JSON API – Frank