驗證手機號碼格式的正規表示式編寫思路詳解

2021-09-16 18:44:44 字數 1937 閱讀 6770

號碼段位址

如上圖我們可以根據不同運營商的號碼段來編寫正則,也可以進行統一校驗的編寫,我這邊主要是編寫統一校驗的。

int phonehead=;

arrays.sort(phonehead);

for(int head:phonehead)

排序結果:

13開頭:

130 131 132

133 134 135 136 137 138 139

對應正則為:(13[0-9]\d)

14開頭:145 147 對應正則為:(14[57]\d)

15開頭:

150 151 152

153 155 156 157 158 159

對應正則為:(15[0-35-9]\d)

17開頭:173 176 177 178 對應正則 為:(17[36-8]\d)

18開頭:180 181 182 183 184 185 186 187 188 189

對應正則為:(18[0-9]\d)

170開頭:1700 1705 1707 1708 1709 對應正則為:(170[057-9]\d)

(13[0-9]\d)|(14[57]\d)|(15[0-35-9]\d)|(17[36-8]\d)|(18[0-9]\d)|(170[057-9]\d)

但此時,我們還是可以看出一些規律可以來簡化這個正規表示式,類似初中數學的合併同類項,把\d提取出來,簡化為:

((13[0-9])|(14[57])|(15[0-35-9])|(17[36-8])|(18[0-9]))\d|(170[057-9]\d)

為了更明顯的檢視分組,我們可以用分組括號把((13[0-9])|(14[57])|(15[0-35-9])|(17[36-8])|(18[0-9]))\d包含起來,變為:

(((13[0-9])|(14[57])|(15[0-35-9])|(17[36-8])|(18[0-9]))\d)

於是,完整的正則就變為了:

(((13[0-9])|(14[57])|(15[0-35-9])|(17[36-8])|(18[0-9]))\d)|(170[057-9]\d)

上面這個正規表示式已經可以投入程式設計使用了,但這個這個正規表示式分組有點多,獲取捕獲組的個數:

string regex="(((13[0-9])|(14[57])|(15[0-35-9])|(17[36-8])|(18[0-9]))\\d)|(170[057-9]\\d)";

matcher m=pattern.compile(regex).matcher("");

system.out.println(m.groupcount());

改為非捕獲組後,正則變為:(?:(?:(?:13[0-9])|(?:14[57])|(?:15[0-35-9])|(?:17[36-8])|(?:18[0-9]))\d)|(?:170[057-9]\d)

此時在regexbuddy正則工具上可以看到0個分組

最終我們得到的正規表示式為

(?:(?:(?:13[0-9])|(?:14[57])|(?:15[0-35-9])|(?:17[36-8])|(?:18[0-9]))\d)|(?:170[057-9]\d)

若是要匹配開頭和結尾的話,改為

^(?:(?:(?:13[0-9])|(?:14[57])|(?:15[0-35-9])|(?:17[36-8])|(?:18[0-9]))\d)|(?:170[057-9]\d)$

當然,如果不需要準確校驗的話,其實可以這麼寫就夠了,如下:

^1\d$

手機號碼正規表示式

匹配手機號碼的正規表示式 13 0 9 14 5,7 15 0 3,5 9 17 0,3,5 8 18 0 9 166 198 199 147 d 判斷是否是手機號 param mobile return public static boolean ismobile string mobile 代表...

使用正規表示式驗證手機號碼

開發工具與關鍵技術 vs2015 正規表示式function checkphone phone if ab.test phone false returnfalse 如上 所示,我們寫了乙個方法驗證手機號碼,其實就是乙個正規表示式,它規定第一位數字輸入的必須是1,第二位數字輸入的必須是3,4,5,7...

手機號碼驗證正規表示式js

function ismobel value g.test value else 表示式分析 代表乙個正規表示式。代表字串的開始位置,代表字串的結束位置。代表匹配前面的字元乙個或零個,所以這裡0?的意思是手機號碼可以以0開頭或不以0開頭。接下的部分驗證11位的手機號碼,先從13開始,因為從130 1...