Jquery验证:正则表达式在非美国电话号码中

时间:2010-09-11 02:59:49

标签: jquery regex

我正在使用它:

jQuery.validator.addMethod("regex2", function(value, element, param) {
  return value.match(new RegExp("." + param + "$"));
});

$("#phonenumber").rules("add", { regex2: "[0-9]+"})

验证手机。电话号码必须至少7位数,我从elsewhere获得此正则表达式并使用参数minlength=7,但这显然不合适。该验证应该如何进行?

我住在委内瑞拉。所以我想this is useless。我该怎么改变它?在我的国家/地区0416-414 33 44应被视为电话号码的有效输入。

4 个答案:

答案 0 :(得分:3)

假设:

  • 空格字符可以是任何空格。
  • 空格是可选的。
  • 可以有多个空间。
  • 必须至少有七位数。

然后将"[0-9]+"更改为"[0-9]{7,}\s*$"

"."似乎也不正确,应该是"^"

答案 1 :(得分:2)

您无法先修剪然后验证,或只是在此行中的\s?之前添加$

  return value.match(new RegExp("." + param + "$"));

改变? a *接受多个空白

答案 2 :(得分:2)

您对正则表达式前面的.确定吗?我想知道这是否应该是与^对应的插入符$:它锚定正则表达式,因此整个字符串必须与正则表达式匹配。

您可以为正则表达式添加空格,但更优雅的解决方案是首先修剪它。修剪字符串会从开头和结尾删除空格。这些都可以起作用:

// Trim value before matching against regex.
return jQuery.trim(value).match(new RegExp("^" + param + "$"));

// Allow spaces at beginning or end with " *" (space + asterisk).
return value.match(new RegExp("^ *" + param + " *$"));

此外,虽然我们正处于此状态,但您可以通过在param附近添加括号来使其更加强大。

// Add parentheses for robustness.
return jQuery.trim(value).match(new RegExp("^(?:" + param + ")$"));

这样,即使param是this|that,你的新正则表达式也会起作用。您希望匹配^(this|that)$而不是^this|that$,因为后者等同于不正确的(^this)|(that$)

答案 3 :(得分:2)

您可能会发现以下正则表达式非常有用,它基本上首先删除了世界上任何地方的电话号码都可以包含的所有有效特殊字符(空格,parens,+-,{{1} },.)然后计算至少为7的数字。

ext

$.validator.addMethod('phone', function(value, element) { return this.optional(element) || (/^\d{7,}$/).test(value.replace(/[\s()+\-\.]|ext/gi, '')); }); 一起使用。