2011-04-30 236 views
3

我想验证电话和传真号码字段。我想验证他们的电话号码和传真以美国格式。我搜查了但没有成功。任何一个可以帮助我如何可以验证在以下格式验证美国格式的电话号码

Edit 1 (415) xxx xxxx

+0

http://stackoverflow.com/questions/1141933/validate-phone-number-existence-for-united-states – 2011-04-30 13:00:04

+0

的重复请指定您认为可接受的数字格式,以及哪些格式不可接受。例如,以下哪一项对您有效:“+1 303 433 1321”,“1-303-343-1341”,“(333)341-1234”,“333.123.1234”,“333-123- 1234“,”3331231234“。 – Phrogz 2011-04-30 13:01:58

+0

您是否熟悉正则表达式?问题[美国电话号码验证](http://stackoverflow.com/q/175488/427545)包含一个很好的问题。 – Lekensteyn 2011-04-30 13:02:49

回答

6

最好的方法是删除所有非数字,然后将其格式化为您的首选格式。

var raw_number = str.replace(/[^0-9]/g,''); 
var regex1 = /^1?([2-9]..)([2-9]..)(....)$/; 
if(!regex1.test(raw_number)) { 
    // is invalid... 
} else { 
    var formatted_number = str.replace(regex1,'1 ($1) $2 $3') 
} 

这样,如果他们进入234/555-0123它将成为1 (234) 555 0123您的首选格式。

+0

这是我发布的更简化的版本,除非我不使用第二个正则表达式。 – 2011-04-30 16:55:12

1

这是一个我使用(jQuery的)的现场验证的onblur:

http://jsfiddle.net/userdude/Ju72W/

jQuery(document).ready(function($){ 
    $cf = $('#customfield_10117'); 
    $cf.blur(function(e){ 
     phone = $(this).val(); 
     phone = phone.replace(/[^0-9]/g,''); 
     if (phone.length != 10) { 
      e.preventDefault(); 
      if (confirm('Phone number must include area code and prefix.')) { 
       setTimeout(function(){$cf.focus()}, 0); 
      } 
     } else { 
      area = phone.substring(0,3); 
      prefix = phone.substring(3,6); 
      line = phone.substring(6); 
      $(this).val('(' + area + ') ' + prefix + '-' + line); 
     } 
    }); 
}); 

它检查如果提交了10个号码,那么如果这是真的,则重新格式化为(000)000-0000格式。

EDIT

使用相同的技术(具有添加的国家代码限定符)的函数。

http://jsfiddle.net/userdude/Ju72W/1/

jQuery(document).ready(function($){ 
    $cf = $('#customfield_10117'); 
    $cf.blur(function(e){ 
     number = phoneCheckAndFormat(this.value, 11); 
     if (number === false) { 
      alert('Entered phone number is not correct.'); 
      return; 
     } 
     $(this).val(number); 
    }); 
}); 

function phoneCheckAndFormat(phone, digits) { 
    phone = phone.replace(/[^0-9]/g,''); 
    digits = (digits > 0 ? digits : 10); 
    if (phone.length != digits) { 
     return false; 
    } else { 
     code = ''; 
     if (digits == 11) { 
      code = '1 '; 
      phone = phone.substring(1); 
     } 
     area = phone.substring(0,3); 
     prefix = phone.substring(3,6); 
     line = phone.substring(6); 
     return code + '(' + area + ') ' + prefix + '-' + line; 
    } 
} 
2

使用正则表达式是好的,我想,如果你是conscienciously限制你的功能美构成的电话号码。

但是,只要您的代码需要处理国际关系,该方法不再是最合适的选项。如果你有这样的计划,而且你使用的是JavaScript,我建议你看看Google的libphonenumber

2

以下JavaScript REGEX验证123-456-7890或123.456.7890或1234567890或123 456 7890或(123)456-7890

^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$ 
+0

谢谢,Awais,为更正。 – Billbad 2011-12-18 21:56:53