jqueryvalidation电话号码

我想validation电话号码,如(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})

你的代码:

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

在jQuery Validate插件 matches任何地方都没有称为matches回调函数,选项,方法或规则。编辑:OP未提及matches是他的自定义方法。

但是,在additional-methods.js文件中 ,您可以使用多种电话号码validation方法。 一个名为phoneUS应该满足你的模式。 由于规则已经validation了长度,因此冗余不需要minlengthmaxlength 。 区域代码和前缀不能以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"); 
 /\(?([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
 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/

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

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

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

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

/^1?\d{10}$/

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

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

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

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

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

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

如果您想要有效的10位数电话号码“US number”,此function将起作用

 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})$/ 

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