2011-03-12 325 views
2

我想確保電話號碼輸入正確。它們是英國的數字,不能包含任何符號或字母。它們的長度必須是11。Javascript電話號碼驗證

所以我曾嘗試以下:

else if (phone == null || !phone.toString().match(/^[-]?\d*\.?\d*$/)){ 

但是,這實際上允許任何長度,甚至空白的輸入。

我該怎麼做才能驗證電話號碼?我不是那種經驗豐富的Javascript。

+0

你從哪裏拿到手機?顯示手機分配的位置。如果'phone = someElement.value','phone == null'可以省略 – Lekensteyn 2011-03-12 22:51:27

回答

3

是,你應該使用正則表達式,但我會允許用戶添加其他字符,以提高可讀性。這可能是工作,如果你的手機號碼必須是共有11位:

/^(?:\W*\d){11}\W*$/.test(phone.value) 

\W是什麼,但數字,字母和下劃線,但因爲它的目的是允許的空間,點,連字符和斜線,你可以使用代替[ .\-\/]

當字段通過驗證後,您可以將其清理成更標準的格式,通常是小組數字(取決於您所在國家的習慣),但可能會從刪除所有非數字字符開始。

phone.value = phone.value.replace(/\W+/g, ''); 

如果您允許國際訪問代碼或其他前綴,數字的位數可能不固定,但實際上取決於前綴。

8

完全匹配11位數字的正則表達式是/^\d{11}$/

0

下一行exactely匹配的電話11個數字:

else if (/^\d{11}$/.test(phone)) { 

我認爲phone是一個字符串,如:

var phone = someHtmlFormElement.value; 
0

你想要更多的東西是這樣的:/^\d{5} \d{6}$/

此外,如果您要提交這個給你的客戶端上做任何驗證都需要在服務器上進行重複的服務器,不要忘記,你不能信任的人將無法繞過你的JavaScript

2

英國的數字不是11位數字。它們是9或10位數字的組合,不包括0中繼碼或+44國家前綴。

規則有些複雜,但可以在少數RegEx模式中定義。

第一步必須調查號碼的其餘部分之前,剝去+4400 44011 44+44 (0)00 44 (0)011 44 (0)0前綴。

Pattern: ^(\(?(?:0(?:0|11)\)?[\s-]?\(?|\+)(44)\)?[\s-]?)?\(?0?(?:\)[\s-]?)?([1-9]\d{1,4}\)?[\d\s-]+)((?:x|ext\.?|\#)\d{3,4})?$ 

使用上面的圖案從$2提取44知道使用國際格式,否則承擔國家格式,如果$2爲null。

$4中提取可選的分機號碼詳細信息,並將它們存儲起來以備後用。

$3中提取NSN(包括空格,連字符和括號)。刪除這些空格,連字符和括號,並使用下面的RegEx模式來驗證長度和初始數字。

Pattern: ^((1[1-9]|2[03489]|3[0347]|5[56]|7[04-9]|8[047]|9[018])\d{8}|(1[2-9]\d|[58]00)\d{6}|8(001111|45464\d))$ 

許多更詳細的模式可以在別處找到,直到個別地區代碼。

0

www.aa-asterisk.org.uk 你可以找到相關的英國電話號碼,例如各種圖案:

模式:

^\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3})|\d{5}\)?[\s-]?\d{4,5}|8(?:00[\s-]?11[\s-]?11|45[\s-]?46[\s-]?4\d))(?:(?:[\s-]?(?:x|ext\.?\s?|\#)\d+)?)$ 

上述模式匹配可選左括號,其次是00 或011和可選的右括號,然後是可選空間 或連字符,然後是可選的左括號。或者, 最初的開括號後面跟着一個文字+不帶空格或連字號的 。前面兩個選項中的任何一個都是 ,後面跟着44個可選的右括號,然後是可選的 空格或連字符,然後是可選的括號中的可選0, 後跟可選空格或連字符,然後是可選開口 括號(國際格式)。或者,該模式匹配 可選的首字母開括號,後跟0號碼 (國家格式)。

例如,用於匹配一個手機號碼,您可以使用下面的函數

function isMobile(v) { 

     //handle leading 0 
     if (v.indexOf('0') === 0) { 
      v = v.substring(1); 
     } 

     var mobile_valid = /^7(?:[1-4]\d\d|5(?:0[0-8]|[13-9]\d|2[0-35-9])|624|7(?:0[1-9]|[1-7]\d|8[02-9]|9[0-689])|8(?:[014-9]\d|[23][0-8])|9(?:[04-9]\d|1[02-9]|2[0-35-9]|3[0-689]))\d{6}$/.test(v); 
     var pager_valid = /^76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\d{6}$/.test(v); 

     // https://en.wikipedia.org/wiki/Personal_numbering 
     var personal_number = /^70\d{8}$/.test(v); 

     if (pager_valid || mobile_valid || personal_number) { 
      return true; 
     } 

     return false; 
    } 
0

我親自測試

/^(\(?(0|\+44)[1-9]{1}\d{1,4}?\)?\s?\d{3,4}\s?\d{3,4})$/ 

/^((0|\+44)7\d{3}\s?\d{6})$/ 

,如果我想挑出移動數字具體。希望這可以幫助。