jquery验证电话号码

时间:2013-11-07 15:48:02

标签: javascript jquery jquery-validate

我想验证电话号码,如(123)456-7890或1234567890  如何在下面的代码中写出“匹配”条件?

form.validate({

    rules: {

       phoneNumber: {matches:"[0-9]+",minlength:10, maxlength:10}

9 个答案:

答案 0 :(得分:23)

你的正则表达式应该是

[0-9\-\(\)\s]+

它匹配数字,短划线,括号和空格。

如果你需要更严格的东西,只需要匹配你的例子,试试这个:

([0-9]{10})|(\([0-9]{3}\)\s+[0-9]{3}\-[0-9]{4})

答案 1 :(得分:19)

您的代码:

rules: {
    phoneNumber: {
        matches: "[0-9]+",  // <-- no such method called "matches"!
        minlength:10,
        maxlength:10
    }
}

the jQuery Validate plugin内的任何地方都没有名为matches的回调函数,选项,方法或规则。编辑:OP未提及{{ 1}}是他的自定义方法。

但是,在the additional-methods.js file中,您可以使用多种电话号码验证方法。名为matches的那个应该满足你的模式。由于规则已经验证了长度,因此phoneUSminlength是不必要的。区域代码和前缀也不能以maxlength开头。

1

DEMO:http://jsfiddle.net/eWhkv/


如果出于某种原因,你只需要在另一种方法中使用正则表达式,那么你可以从这里获取它......

rules: {
    phoneNumber: {
        phoneUS: true
    }
}

答案 2 :(得分:15)

/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/

支持:

  • (123)456 7899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

答案 3 :(得分:11)

function validatePhone(txtPhone) {
    var a = document.getElementById(txtPhone).value;
    var filter = /^((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$/;
    if (filter.test(a)) {
        return true;
    }
    else {
        return false;
    }
}

演示 http://jsfiddle.net/dishantd/JLJMW/496/

答案 4 :(得分:4)

如果您首先规范化数据,则可以避免验证电话号码所需的所有非常复杂的正则表达式。根据我的经验,复杂的正则表达式模式可能会产生两个不必要的副作用:(1)它们可能会出现意想不到的行为,以后会进行调试,并且(2)它们可能比简单的正则表达式模式慢,这可能会在您使用时变得明显正在循环中执行正则表达式。

通过使正则表达式尽可能简单,您可以降低这些风险,并且您的代码将更容易让其他人遵循,部分原因是它更容易预测。要使用您的电话号码示例,首先我们可以通过删除所有非数字来规范化该值:

value = $.trim(value).replace(/\D/g, '');

现在,您对美国电话号码(或任何其他语言环境)的正则表达式模式可以更加简单:

/^1?\d{10}$/

正则表达式不仅更简单,而且更容易理解正在发生的事情:一个值可选地带有第一个(美国国家代码)后跟十个数字的值。如果您想格式化验证值以使其看起来漂亮,那么您可以使用这个稍长的正则表达式模式:

/^1?(\d{3})(\d{3})(\d{4})$/

这意味着可选的前导号码后跟三位数字,另外三位数字,以四位数结尾。记住每组数字后,您可以按照自己的方式输出数字。这是一个使用jQuery验证的codepen来说明这两种语言环境(新加坡和美国):

http://codepen.io/thdoan/pen/MaMqvZ

答案 5 :(得分:1)

我知道这是一个老帖子,但我想我会分享我的解决方案来帮助别人。

如果您想要有效的10位电话号码“US number”

,此功能将起作用
function getValidNumber(value)
{
    value = $.trim(value).replace(/\D/g, '');

    if (value.substring(0, 1) == '1') {
        value = value.substring(1);
    }

    if (value.length == 10) {

        return value;
    }

    return false;
}

这里有如何使用这种方法

var num = getValidNumber('(123) 456-7890');
if(num !== false){
     alert('The valid number is: ' + num);
} else {
     alert('The number you passed is not a valid US phone number');
}

答案 6 :(得分:1)

这个对我有用: -

/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/

答案 7 :(得分:0)

我尝试了以下解决方案,对我来说效果很好。

/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/

尝试以下电话格式:

  • +(123)456 7899
  • (123)456 7899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

答案 8 :(得分:-1)

您知道这个世界上有很多电话号码格式,因此您可以使用此正则表达式来验证任何电话号码^[0-9-+s()]*$