NANP电话号码的jQueryvalidation
我正在尝试validation我的表单。 在我的表格中是电话号码字段。 用户插入电话号码并进行validation以及格式化。 我在StackOverflow中通过其他地方的搜索阅读了很多其他类似的问题,但我被卡住了。 表单一直说我插入的有效数字无效。
我只关心NANP数字,我理解NANP数字格式如下:NXX-NXX-XXXX,其中N只能是数字[2-9]
,X可以是[0-9]
。 我不需要国家代码。
这是我的代码:
function validatePhone(){ var error = 1; var hasError = false; var $this = $(this); var regex1 = /^(\()?[2-9]{1}\d{2}(\))?(-|\s)?[2-9]{1}\d{2}(-|\s)\d{4}$/; phone = $(this).val(); phone = phone.replace(/[^0-9]/g,''); if(!regex1.test(phone)){ hasError = true; $this.css('background-color','#FFEDEF'); } else{ area = phone.substring(0,3); prefix = phone.substring(3,6); line = phone.substring(6); $this.val('(' + area + ') ' + prefix + '-' + line); $this.css('background-color','#FFFFFF'); }
这个想法是,无论我是插入8012559553,(801)2559553,(801)255-9553,801-255-9553还是类似的东西,它都将被validation和格式化如下:(801)255-9553。 但同样,表格由于某种原因继续说我插入的任何数字都是无效的,无论它是否有效。 这是我正在使用的代码,但是不符合NANP格式:
function validatePhone(){ var error = 1; var hasError = false; var $this = $(this); phone = $(this).val(); phone = phone.replace(/[^0-9]/g,''); if(phone.length != 10){ hasError = true; $this.css('background-color','#FFEDEF'); } else{ area = phone.substring(0,3); prefix = phone.substring(3,6); line = phone.substring(6); $this.val('(' + area + ') ' + prefix + '-' + line); $this.css('background-color','#FFFFFF'); }
所以,我在实现数字的正则表达式测试时遇到了麻烦,以确保数字是真实的,然后将数字格式正确…任何想法?
你的代码的问题是regex1
正在寻找phone
字符串中的特殊字符。 代码失败是因为您要从phone
phone = phone.replace(/[^0-9]/g,'');
phone
中的所有特殊字符phone = phone.replace(/[^0-9]/g,'');
,因此当您对regex1
进行测试时,您正在寻找已经删除的值。
无论如何,你的方法很好。 通常我发现使用两个简单的REGEX更容易,而不是试图将所有东西都装入一个全能的REGEX中。 一旦你修改regex1只对没有特殊字符的10位数字进行NANP有效性检查,你的代码就可以正常工作了。
function validatePhone(){ var error = 1; var hasError = false; var $this = $(this); var regex1 = /^([2-9]{1}\d{2})([2-9]{1}\d{2})\d{4}$/; phone = $(this).val(); phone = phone.replace(/[^0-9]/g,''); if(!regex1.test(phone)){ hasError = true; $this.css('background-color','#FFEDEF'); } else{ area = phone.substring(0,3); prefix = phone.substring(3,6); line = phone.substring(6); $this.val('(' + area + ') ' + prefix + '-' + line); $this.css('background-color','#FFFFFF'); }
这是我不是很严格但很好的RegExp:
/^\D*([2-9]\d{2}\D*){2}(\d{2}\D*){2}\D*$/
它接受:
- (235)-546-42-09
- 452-845-12-12
- [933] -323-34-53
- 222-435-0903
- 222-4350903
- 2224350903
- (222) – 785 – 12 – 76
它不接受:
- 111-342-45-45
- 234-111-50-78
- 222-222-222-2(你可以简单地修改RegExp来删除它)