jquery验证电话号码

Fli*_*Off 18 javascript jquery jquery-validate

我想验证电话号码,如(123)456-7890或1234567890如何在以下代码中写入'匹配'条件?

form.validate({

    rules: {

       phoneNumber: {matches:"[0-9]+",minlength:10, maxlength:10}
Run Code Online (Sandbox Code Playgroud)

Bin*_*ain 23

你的正则表达应该是这样的

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

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

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

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

  • @KarueBensonKarue `var phone_pattern = /([0-9]{10})|(\([0-9]{3}\)\s+[0-9]{3}\-[0-9]{4 })/; phone_pattern.test( input_value );` (3认同)
  • 你确定第一个表达是正确的吗?我试过但不适合我. (2认同)

Spa*_*rky 20

你的代码:

rules: {
    phoneNumber: {
        matches: "[0-9]+",  // <-- no such method called "matches"!
        minlength:10,
        maxlength:10
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有这样的回调函数,选项,方法,或叫规则matches中的任何地方的jQuery验证插件. (编辑:OP未提及这matches是他的自定义方法.)

然而,内部additional-methods.js文件,还有你可以使用几个电话号码验证方法.被叫的人phoneUS应该满足你的模式.由于规则已经验证了长度,minlength因此maxlength是多余的.它也更全面,区域代码和前缀不能以a开头1.

rules: {
    phoneNumber: {
        phoneUS: true
    }
}
Run Code Online (Sandbox Code Playgroud)

演示:http: //jsfiddle.net/eWhkv/


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

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");
Run Code Online (Sandbox Code Playgroud)


小智 15

/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
Run Code Online (Sandbox Code Playgroud)

支持:

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


Dis*_* TD 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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


thd*_*oan 5

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

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

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

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

/^1?\d{10}$/

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

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

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

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