iOS中10位数电话号码的正则表达式

时间:2013-04-19 21:10:11

标签: ios objective-c regex nsregularexpression

我正在尝试编写正则表达式以匹配10位数而不包含任何其他字符。 例如。 2345678901

第一个数字应该在2-9之间 休息9位数可以是任何

我尝试过编写不同的正则表达式,但都没有。

NSString * newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

//^([0-9]+)?(([0-9]{9})?)?$     (([2-9]{1})?)?(([0-9]{8,9})?)?
NSString *expression = [NSString stringWithFormat:@"^(([2-9]{1})?)?(([0-9]{8,9})?)?$"];

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:nil];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                    options:0
                                                      range:NSMakeRange(0, [newString length])];
if (numberOfMatches == 0) {
    return NO;
}

return YES;

`

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

一个非常直接的正则表达式匹配你需要的是

^[2-9][0-9]{9}$

它匹配2..9范围内的第一个数字,以及0..9范围内的其他九个数字,总共十个数字。

请注意,此表达式适用于验证整个字符串,而不是部分字符串。您无法在textField:shouldChangeCharactersInRange:replacementString:中使用它来验证数字是否可用。

无论如何都要验证输入格式是不是一个好主意,因为用户可以选择在键入之前将光标移动到正确的位置,以任何顺序输入手机的数字。相反,您应该将keyboardType的{​​{1}}属性设置为UITextField,并允许用户输入任意数量的数字。在他们告诉你他们完成之前不要限制他们的输入:他们可能想要从记事本中粘贴数据,然后擦除分隔符,或者在删除前面的部分之前在末尾输入一些额外的数字输入。

相反,您应该在UIKeyboardTypeDecimalPad方法中使用上述表达式。当正则表达式匹配时,返回textFieldShouldEndEditing:;否则,返回YES,并向用户提供一些视觉反馈,以指示需要更改该号码。阅读NO文档中textFieldShouldEndEditing:方法的讨论部分。