前不久換手機號,東想西想,最後選了個電信的199號碼段。這下好了,當我註冊某些網站的賬號時,彈出個非法號碼欄位,驚了!怎麼回事??? 於是想到:當我們註冊某網站的時候,需要輸入手機號進行註冊。比如唯品會的註冊界面,當你輸入的手機號不對時就會出現錯誤提示:請輸入正確的手機號碼。 這個是怎麼實現的呢?比 ...
前不久換手機號,東想西想,最後選了個電信的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}$/