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

标签 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;

`

感谢您的帮助。

最佳答案

一个非常简单的正则表达式来匹配你需要的是

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

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

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

在输入时验证输入的格式并不是一个好主意,因为用户可以通过在键入前将光标移动到正确位置来选择以任何顺序输入电话号码。相反,您应该将 UITextFieldkeyboardType 属性设置为 UIKeyboardTypeDecimalPad,并让用户键入任意数量的数字。在他们告诉您他们完成之前不要限制他们的输入:他们可能想从记事本等粘贴数据,然后删除分隔符,或者在删除前面的部分之前在末尾输入一些额外的数字输入的。

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

关于ios - iOS中10位电话号码的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16113541/

相关文章:

ios - 将点击手势从 UIView 传递到底层 AVPlayer

mysql - 正则表达式,将 "22,09"替换为 "22.09"

php - 在 mysql 中使用 REGEX 对特定字符进行严格的数字检查

iphone - iOS - 自动缩小带有属性文本的 UILabel

ios - UICollectionView didDeselectItemAt 没有被触发

ios - AppStore Connect 显示的屏幕截图颜色空间错误

java - 行为 |正则表达式中的符号

ios - progressview 在 ios7 中没有显示

java - Java 中 Double.NaN 的 Objective-C 等价物是什么?

objective-c - 以 root 身份使用 AuthorizationExecuteWithPrivileges 执行命令的替代方法