【问题标题】:Regular expression for 10digit phonenumber in iOSiOS中10位电话号码的正则表达式
【发布时间】:2013-04-19 21:10:10
【问题描述】:

我正在尝试编写一个正则表达式来匹配一个没有任何其他字符的 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;

`

感谢您的帮助。

【问题讨论】:

    标签: ios objective-c regex nsregularexpression


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 我之前尝试过使用相同的正则表达式,但模拟器甚至不允许我输入任何数字。
    • @user2229791 我没有意识到您正在尝试使用表达式进行部分验证。看看编辑。
    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2017-09-23
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多