Javascript jquery验证电话号码

Javascript jquery验证电话号码,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,我想验证电话号码,如(123)456-7890或1234567890 在下面的代码中应该如何编写“匹配”条件 form.validate({ rules: { phoneNumber: {matches:"[0-9]+",minlength:10, maxlength:10} 你的正则表达式应该是 [0-9\-\(\)\s]+ 它匹配数字、破折号、括号和空格 如果您需要更严格的要求,请尝试以下方法: ([0-9]{10})|(\([0-9]{3})\s+[0-9]{3

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

form.validate({

    rules: {

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

你的正则表达式应该是

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

它匹配数字、破折号、括号和空格

如果您需要更严格的要求,请尝试以下方法:

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

支持:

  • (123)4567899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 1234567899
  • 1234567899
您的代码:

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


如果出于任何原因,您只需要在另一个方法中使用正则表达式,您可以从这里获取它

jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, "");
    return this.optional(element) || phone_number.length > 9 && 
    phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

Demo

如果先规范化数据,那么就可以避免验证电话号码所需的所有非常复杂的正则表达式。根据我的经验,复杂的正则表达式模式可能有两个不必要的副作用:(1)它们可能有意外的行为,这将是以后调试的一个难题;(2)它们可能比简单的正则表达式模式慢,这在循环中执行正则表达式时可能会很明显

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

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

现在,美国电话号码(或任何其他地区)的正则表达式模式可以简单得多:

/^1?\d{10}$/

正则表达式不仅简单得多,而且更容易理解所发生的事情:一个值可以选择以数字1(美国国家代码)开头,后跟十位数字。如果您想格式化已验证的值以使其看起来美观,则可以使用稍长的正则表达式模式:

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

这意味着可选的前导数字1后跟三位数字,另外三位数字,最后四位数字。随着每组数字的记忆,你可以输出它任何你想要的方式。下面是一个使用jQuery验证的代码笔,用于说明两个地区(新加坡和美国)的情况:


我知道这是一篇老文章,但我想我会分享我的解决方案来帮助他人

如果您想输入有效的10位电话号码“US number”,此功能将起作用

这里介绍如何使用这种方法

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

这是我的工作:-

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

我尝试了下面的解决方案,效果很好

/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
尝试以下电话格式:

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

什么是
匹配的
应该是什么?这个插件中没有这样的方法。代码是定制的,你应该在OP中提到。为什么不使用其中的一个呢?你确定第一个表达式是正确的吗?我试过了,但没有成功。@KarueBensonKarue
var phone_pattern=/([0-9]{10}){124;(\([0-9]{3})\s+[0-9]{3}-[0-9]{4})/;电话模式测试(输入值)这是完美的,谢谢。但我必须遵守代码标准。他们用我写的方式做事。我是jquery的新手:'(@Mr.Flint,就像我在回答的最后一部分中显示的那样,在这个方法中有一个非常好的电话号码regex,你可以使用它来代替……这不是你要求的吗?为已经存在的东西编写代码真的没有意义……特别是如果你是一个新手。@Mr.Flint,如果你已经显示了
匹配的方法
的话在您的OP中,我们可以为您创建一个工作演示。@Sparky非常感谢您为我节省时间。嗯…这个怎么样:/^(?(\d{3}))?[-]?(\d{3})[-]?(\d{4})$/
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');
}
/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/
jQuery.validator.methods.matches = function( value, element, params ) {
    var re = new RegExp(params);
    // window.console.log(re);
    // window.console.log(value);
    // window.console.log(re.test( value ));
    return this.optional( element ) || re.test( value );
}

rules: {
        input_telf: {
            required  : true,
            matches   : "^(\\d|\\s)+$",
            minlength : 10,
            maxlength : 20
        }
    }
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/