前不久換手機號,東想西想,最后選了個電信的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}$/

