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

问题描述 投票:0回答:9

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

form.validate({

    rules: {

       phoneNumber: {matches:"[0-9]+",minlength:10, maxlength:10}
javascript jquery jquery-validate
9个回答
34
投票

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

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

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

如果您需要更严格的东西,仅匹配您的示例,请尝试以下操作:

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


28
投票

您的代码:

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

jQuery Validate 插件
中的任何地方都没有这样的回调函数、选项、方法或规则 matches编辑:OP 没有提及
matches
是他的自定义方法。

但是,在additional-methods.js

文件
中,您可以使用多种电话号码验证方法。名为 phoneUS
 的应该可以满足您的模式。由于规则已经验证了长度,因此 
minlength
maxlength
 是不必要的。它也更全面,因为区号和前缀不能以 
1
 开头。

rules: { phoneNumber: { phoneUS: true } }

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

22
投票
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/


17
投票
/\(?([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

5
投票
如果您首先对数据进行标准化,那么您可以避免验证电话号码所需的所有非常复杂的正则表达式。根据我的经验,复杂的正则表达式模式可能会产生两个不需要的副作用:(1)它们可能会产生意想不到的行为,这会给以后的调试带来麻烦,(2)它们可能比简单的正则表达式模式慢,当您正在循环中执行正则表达式。

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

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



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

/^1?\d{10}$/



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

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



这意味着可选的前导数字 1 后跟三位数字,另外三位数字,最后以四位数字结尾。记住每组数字后,您可以按照您想要的方式输出它。这是一个使用 jQuery Validation 的 codepen 来说明两个区域设置(新加坡和美国)的情况:

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


2
投票
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 } }
    

1
投票
我知道这是一篇旧帖子,但我想我会分享我的解决方案来帮助其他人。

如果您想要有效的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'); }
    

1
投票
这对我来说是工作:-

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

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

/\(?([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
© www.soinside.com 2019 - 2024. All rights reserved.