如何使用jQuery验证北美电话号码?

mccptt67  于 11个月前  发布在  jQuery
关注(0)|答案(9)|浏览(134)

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

form.validate({

    rules: {

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

字符串

m4pnthwp

m4pnthwp1#

您的正则表达式应该类似于
[0-9\-\(\)\s]+的。
它匹配数字、破折号、括号和空格。
如果您需要更严格的内容,只匹配您的示例,请尝试以下操作:
([0-9]{10})|(\([0-9]{3}\)\s+[0-9]{3}\-[0-9]{4})

xqkwcwgp

xqkwcwgp2#

密码:

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

字符串

the jQuery Validate plugin中没有任何回调函数、选项、方法或规则称为matches(* 编辑:OP没有提到matches是他的自定义方法 *)

然而,在the additional-methods.js file中,有几种电话号码验证方法可以使用。称为phoneUS的方法应该满足您的模式。由于规则已经验证了长度,因此minlengthmaxlength是多余的。它也更全面,因为区号和前缀不能以1开头。

rules: {
    phoneNumber: {
        phoneUS: true
    }
}

DEMO: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");

ne5o7dgx

ne5o7dgx3#

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/

s5a0g9ez

s5a0g9ez4#

/\(?([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
gwo2fgha

gwo2fgha5#

如果你首先规范化你的数据,那么你就可以避免验证电话号码所需的所有非常复杂的正则表达式。根据我的经验,复杂的正则表达式模式可能有两个不必要的副作用:(1)它们可能会有意外的行为,这将是一个痛苦的调试之后,(2)它们可能比简单的正则表达式模式慢,当你在循环中执行正则表达式时,这可能会变得明显。
通过使正则表达式尽可能简单,你可以降低这些风险,并且你的代码将更容易被其他人遵循,部分原因是它更可预测。以电话号码为例,首先我们可以通过剥离所有非数字来规范化值,如下所示:
第一个月
现在,美国电话号码(或任何其他地区)的正则表达式模式可以简单得多:
/^1?\d{10}$/
正则表达式不仅简单得多,而且更容易理解:一个值可选地以数字1(美国国家代码)开头,后跟10位数字。如果你想格式化验证值,使其看起来更漂亮,那么你可以使用这个稍微长一点的正则表达式模式:
/^1?(\d{3})(\d{3})(\d{4})$/
这意味着一个可选的前导数字1后跟三位数字,另外三位数字,并以四位数字结尾。记住每组数字,您可以以任何方式输出它。下面是一个使用jQuery验证的codepen,用于两个地区(新加坡和美国):
http://codepen.io/thdoan/pen/MaMqvZ

0h4hbjxa

0h4hbjxa6#

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
        }
    }

字符串

3zwjbxry

3zwjbxry7#

我知道这是一个老帖子,但我想我会分享我的解决方案来帮助别人。
此功能将工作,如果你想有效的10位数的电话号码“美国号码”

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

xfyts7mz

xfyts7mz8#

这是我的工作:

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

字符串

jei2mxaa

jei2mxaa9#

我尝试了下面的解决方案,它对我来说很好。

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

字符串
已尝试以下电话格式:

  • 电话:+86-456 - 7899
  • 电话:(123)456 7899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

相关问题