4

我正在尝试在 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");
4

3 回答 3

5

Bergi 是正确的,您构建正则表达式的方式是错误的。

另一个问题是您缺少锚点和 a +

var re = /^[\d\s()+-]+$/;

请注意,尽管基于正则表达式的解决方案仍将允许某些不是有效电话号码的输入。您可以通过多种方式改进您的正则表达式,例如,您可能希望要求至少有 x 个数字。

对于哪些电话号码有效和无效,有很多规则。您不太可能以可维护的方式将所有这些规则编码为正则表达式,因此您可以尝试以下方法之一:

  • 找到一个能够验证电话号码(但可能不是基于正则表达式)的库。
  • 如果您需要正则表达式,请瞄准与规则非常接近的内容,但不要尝试处理所有特殊情况。我建议尝试编写一个接受所有有效电话号码但不一定拒绝所有无效电话号码的表达式。

您可能还需要考虑为您的解决方案编写测试用例。测试还将兼作您希望接受和拒绝哪些输入的文档形式。

于 2012-08-04T12:24:07.387 回答
2

您需要在构造函数中使用正则表达式文字字符串文字:RegExp

var re = /[\d\s()+-]/g;
// or
var re = new RegExp("[\\d\\s()+-]", "g");

另请参阅创建正则表达式

除此之外,您需要使用字符串开始和结束锚点来确保正则表达式匹配整个字符串,而不仅仅是它的一部分,以及一些重复修饰符以允许多个字符:

var re = /^[\d\s()+-]+$/g;
于 2012-08-04T12:25:32.857 回答
1

另一种方法可能是:

function(value) {
  return /^\d+$/.test(value.replace(/[()\s+-]/g,''));
}

如果你也想检查数字的长度,说它必须是一个 10 位数字的字符串:

function(value) {
  return /^\d{10}$/.test(value.replace(/[()\s+-]/g,''));
}
于 2012-08-04T12:31:25.227 回答