我正在努力验证jQuery验证中的电话号码。我想要的只是允许(01660) 888999
这样的数字。环顾网络我找到了一百万个例子,但似乎没什么用。这是我目前的努力
$.validator.addMethod("phonenumber", function(value) {
var re = new RegExp("/[\d\s()+-]/g");
return re.test(value);
//return value.match("/[\d\s]*$");
}, "Please enter a valid phone number");
答案 0 :(得分:5)
Bergi是正确的,你构建正则表达式的方式是错误的。
另一个问题是你缺少锚点和+
:
var re = /^[\d\s()+-]+$/;
请注意,基于正则表达式的解决方案仍然允许某些输入不是有效的电话号码。您可以通过多种方式改进正则表达式,例如,您可能希望要求至少有x位数。
对于哪些电话号码有效且无效,有许多规则。您不太可能以可维护的方式将所有规则编码到正则表达式中,因此您可以尝试以下方法之一:
您可能还想考虑为您的解决方案编写测试用例。测试也将作为您希望接受和拒绝哪些输入的文档形式加倍。
答案 1 :(得分:2)
您需要在RegExp
constructor中使用正则表达式文字或字符串文字:
var re = /[\d\s()+-]/g;
// or
var re = new RegExp("[\\d\\s()+-]", "g");
另见Creating a Regular Expression。
除此之外,您需要使用start- and end-of-string anchors来确保正则表达式匹配整个字符串,而不仅仅是其中的一部分,以及一些repetition modifier以允许多个字符:< / p>
var re = /^[\d\s()+-]+$/g;
答案 2 :(得分:1)
另一种方法可能是:
function(value) {
return /^\d+$/.test(value.replace(/[()\s+-]/g,''));
}
如果你想检查数字的长度,说它必须是一个10位数的字符串:
function(value) {
return /^\d{10}$/.test(value.replace(/[()\s+-]/g,''));
}