仅在jQuery验证中验证数字,括号和空格

时间:2012-08-04 12:21:00

标签: javascript jquery regex jquery-validate

我正在努力验证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");

3 个答案:

答案 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,''));
}