2011-04-30 99 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