我的页面上有 jQuery 验证插件。当有人在表单字段中输入电话号码时,我希望验证器仅识别某种格式(ru):
+#(###)-###-##-##
or
+#-###-###-####
or
+#-###-###-##-##
or
+###########
我在 .js 文件中有这个:
$.validator.addMethod('customphone', function (value, element) {
return this.optional(element) || /^\+d{1}(\d{3})\d{7}$/.test(value);
}, "Please enter a valid phone number");
$(document).ready(function() {
$('form').validate({
rules: {
phone: 'customphone'
} ...
这对我不起作用,有人明白为什么吗?或者有更好的方法来做到这一点吗? :)
最佳答案
您需要以下正则表达式:
/^\+(?:\d(?:\(\d{3}\)|-\d{3})-\d{3}-(?:\d{2}-\d{2}|\d{4})|\d{11})$/
请参阅regex demo
您的正则表达式 ^\+d{1}(\d{3})\d{7}$
具有 d
而不是 \d
(因此无法匹配数字)和未转义的括号(因此该模式与文字括号不匹配)。
分割:
^
- 字符串开头\+
- 文字+
符号(?:\d(?:\(\d{3}\)|-\d{3})-\d{3}-(?:\d{2}-\d{2}|\d{4})|\d{11})
- 两种选择:\d(?:\(\d{3}\)|-\d{3})-\d{3}-(?:\d{2}-\d{2}|\d{4})
:\d
- 数字(?:\(\d{3}\)|-\d{3})
-(123)
如子字符串或-123
子字符串-\d{3}
- 连字符后跟 3 位数字-
- 连字符(?:\d{2}-\d{2}|\d{4})
- 2 位数字,后跟连字符和 2 位数字或 4 位数字
|
- 或\d{11}
- 11 位数字
$
- 字符串结尾
关于javascript - jQuery 电话正则表达式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36235324/