手機號正規表示式

老毛發表於2019-07-23

手機號正則發展歷程

當時考慮到運營商只會提供某些號段的手機號,所以正規表示式是下面的樣子:

/^1([38]\d|5[0-35-9]|7[3678])\d{8}$/

可以看出是用來匹配13X,18X,15X,17X 這些號段。

隨後由於手機號不夠用,又新增了166、198、199號段的手機號,所以正規表示式也要作相應改進:

/^1([38][0-9]|5[0-35-9]|6[6]|7[0135678]|9[89])\d{8}$/

到現在,手機號段新增令人髮指,直逼我們使用簡單粗暴的校驗方式:

/^1(3|4|5|6|7|8|9)\d{9}$/

// 或者
/^1[3456789]d{9}$/

以後,如果有了12X的手機號,乾脆就這樣寫了:

/^\d{11}$/

隨著手機號的日益豐富,我們在放棄了一些追求的同時,也收穫了簡單。simple life。

那麼,如果要校驗國際手機號呢?首先去做個調查:

各國手機號為數不定有多有少。包括香港都和大陸不一樣,香港8位。
德國為10位
日本也十一位
加拿大 和固定電話一樣,7位數
紐西蘭的通常是9位數
英國11位
臺灣的手機號10位
印度十位
阿聯酋7位
瑞士10位
新加坡手機號跟固定電話一樣是8位
荷蘭手機和固定電話都是10位
比利時的手機號是10位
泰國:9位數號碼
法國的10位

看來我們只能校驗一個範圍內的數字了5-11的數字:

/^\d{5,11}$/

那如果又要校驗座機號呢?聽到這裡你可能要說:去他媽的了。不過還是沒有忍住去查了一下座機號的構成規則:

(我國的特服電話1開頭,普通固話2-9開頭)
座機號可以有3位區號+8位本地號+分機號(1到4位)
或者是 4位區號+7位本地號+分機號(1到4位)
其中區號 分機號可能是沒有的,所以正則:

 /^((([0-9]{3}-)?[0-9]{8})|(([0-9]{4}-)?[0-9]{7}))(-[0-9]{1,4})?$/

原文連結

相關文章