1. 程式人生 > >199,一個被正則表達式遺忘的號碼段?

199,一個被正則表達式遺忘的號碼段?

ima new 是否 匹配 gif 輸入 alt 它的 apt

前不久換手機號,東想西想,最後選了個電信的199號碼段。這下好了,當我註冊某些網站的賬號時,彈出個非法號碼字段,驚了!怎麽回事???

於是想到:當我們註冊某網站的時候,需要輸入手機號進行註冊。比如唯品會的註冊界面,當你輸入的手機號不對時就會出現錯誤提示:請輸入正確的手機號碼

技術分享圖片

這個是怎麽實現的呢?比如我那個199開頭的電信號,總是被誤認為非法號碼。究其原因,原來是正則表達式搞的鬼。

首先了解一下什麽是正則表達式?打開百度百科,它的解釋如下:

技術分享圖片

所以,在程序設計上,正則表達式通常用於匹配字符串,一般是匹配有規律的字符串,多數用於表單驗證。比如註冊網站時,我們常常需要按要求填寫的那些賬號密碼信息等。

正則表達式怎麽寫出來的,首先讓我們看看正則表達式是什麽樣子的?

幾個常見的正則表達式
功能實現 正則表達式
Email地址 ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
域名 [a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
身份證號 ^\d{15}|\d{18}$
帳號是否合法 ^[a-zA-Z][a-zA-Z0-9_]{5,15}$

技術分享圖片

坐好了,準備發車!接下來看看正則表達式是怎麽寫的?這些字符代表什麽意思?以及手機號的正則表達式是怎樣的?

正則表達式-特殊字符
. 表示除了換行之外的所有單個字符 \w 表示匹配數字,字母,下劃線[A-Z0-9a-z _]
* 表示匹配任意多次可以是0,一般結合其它字符使用 \W 表示匹配非數字,非字母,非下劃線[^A-Z0-9a- z_]
[] 表示範圍 \d 表示數字[0-9]
^ 表示非 \D 表示非數字[^0-9]
+ 表示至少出現一次 {n,} 至少匹配n次,{n}:表示匹配n次,{n,m}:表示最少n次,最多m次
正則表達式-錨元字符
/^ 從頭匹配
$/ 從尾部匹配
\b
匹配邊界
\s 匹配空格
正則表達式-選擇字符
| 或者的意思
() 表示分組

那麽常用的手機號的正則表達式是怎樣的?

首先得了解一下三大運營商的各號碼段如何:

技術分享圖片

技術分享圖片

技術分享圖片

於是滿足所有條件的手機號碼的正則表達式誕生了:

/^1([358][0-9]|4[579]|66|7[0135678]|9[89])\d{8}$/

技術分享圖片

199,一個被正則表達式遺忘的號碼段?