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

Validate numbers, parenthesis and spaces only in jQuery validation

本文关键字:验证 空格 数字 jQuery 仅在      更新时间:2023-09-26

我在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");

Bergi认为构造正则表达式的方式是错误的,这是正确的。

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

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

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

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

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

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

您需要在RegExp构造函数中使用regex文本或字符串文本

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

请参见创建正则表达式。

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

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

另一种方法可能是:

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

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

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