PHP 正则匹配手机号
<h1>PHP 正则匹配手机号(国内)</h1><p>PHP提供了多种内置的正则匹配函数,如<code>php_filter()</code> 、<code>php_grep()</code>、<code>php_match_all()</code>等,最重要的是我们要根据要判定的数据要求,来精准判定,以此来达到最后的目的。</p>
<p>本次,我们判定国内的手机号格式,要求:<code>不匹配卫星电话的号段</code>。</p>
<h2>电信网编号总览</h2>
<div class="table-box">
<table>
<thead>
<tr><th>序号</th><th>号码</th><th>长度</th><th>备注</th><th>正则规则</th></tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>13x</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^13(4\d{7}|\d\d{8})$</code></td>
</tr>
<tr>
<td>2</td>
<td>1349</td>
<td>11</td>
<td>公众移动通信网网号,卫星移动通信业务专用号段</td>
<td><code>^1349\d{7}$</code></td>
</tr>
<tr>
<td>3</td>
<td>140XX</td>
<td>13</td>
<td>中国联通物联网网号</td>
<td><code>^140\d{10}$</code></td>
</tr>
<tr>
<td>4</td>
<td>141XX</td>
<td>13</td>
<td>中国电信物联网网号</td>
<td><code>^141\d{10}$</code></td>
</tr>
<tr>
<td>5</td>
<td>142XX~143XX</td>
<td>13</td>
<td>物联网网号</td>
<td><code>^142\d{10}$</code></td>
</tr>
<tr>
<td>6</td>
<td>144XX</td>
<td>13</td>
<td>中国移动物联网网号</td>
<td><code>^144\d{10}$</code></td>
</tr>
<tr>
<td>7</td>
<td>145~149</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^14\d{8}$</code></td>
</tr>
<tr>
<td>8</td>
<td>15X</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^15\d{9}$</code></td>
</tr>
<tr>
<td>9</td>
<td>161~162</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^16\d{8}$</code></td>
</tr>
<tr>
<td>10</td>
<td>164~167</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^16\d{8}$</code></td>
</tr>
<tr>
<td>11</td>
<td>170~178</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^17\d{8}$</code></td>
</tr>
<tr>
<td>12</td>
<td>174</td>
<td>11</td>
<td>公众移动通信网网号,卫星移动通信业务专用号段</td>
<td><code>^174\d{8}$</code></td>
</tr>
<tr>
<td>13</td>
<td>18X</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^18\d{9}$</code></td>
</tr>
<tr>
<td>14</td>
<td>19X</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^19\d{9}$</code></td>
</tr>
</tbody>
</table>
</div>
<p>标记为公众移动通信网网号的为运营商可以使用的、用于个人通讯业务的号段。<br>开放的号段并非全部都已使用,只是指运营商可以在其内开展、经营业务。</p>
<h2>移动</h2>
<div class="table-box">
<table>
<thead>
<tr><th>序号</th><th>运营商</th><th>号码</th><th>长度</th><th>备注</th><th>正则规则</th></tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>中国移动</td>
<td>134~139</td>
<td>11</td>
<td>公众移动通信网网号,1349除外</td>
<td><code>^13(4\d{7}|\d{8})$</code></td>
</tr>
<tr>
<td>2</td>
<td>中国移动</td>
<td>147</td>
<td>11</td>
<td>公众移动通信网网号,TD数据卡专用</td>
<td><code>^147\d{8}$</code></td>
</tr>
<tr>
<td>3</td>
<td>中国移动</td>
<td>150~152</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^15\d{8}$</code></td>
</tr>
<tr>
<td>4</td>
<td>中国移动</td>
<td>157~159</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^15\d{8}$</code></td>
</tr>
<tr>
<td>5</td>
<td>中国移动</td>
<td>172</td>
<td>11</td>
<td>公众移动通信网网号,2014新增</td>
<td><code>^172\d{8}$</code></td>
</tr>
<tr>
<td>5</td>
<td>中国移动</td>
<td>178</td>
<td>11</td>
<td>公众移动通信网网号,2014新增</td>
<td><code>^178\d{8}$</code></td>
</tr>
<tr>
<td>6</td>
<td>中国移动</td>
<td>182~184</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^18\d{8}$</code></td>
</tr>
<tr>
<td>7</td>
<td>中国移动</td>
<td>187~188</td>
<td>11</td>
<td>公众移动通信网网号,188TD专用</td>
<td><code>^18\d{8}$</code></td>
</tr>
<tr>
<td>8</td>
<td>中国移动</td>
<td>198</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^198\d{8}$</code></td>
</tr>
</tbody>
</table>
</div>
<h2>联通</h2>
<div class="table-box">
<table>
<thead>
<tr><th>序号</th><th>运营商</th><th>号码</th><th>长度</th><th>备注</th><th>正则规则</th></tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>中国联通</td>
<td>130~132</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^13\d{8}$</code></td>
</tr>
<tr>
<td>2</td>
<td>中国联通</td>
<td>145~146</td>
<td>11</td>
<td>公众移动通信网网号,145TD数据卡专用</td>
<td><code>^14\d{8}$</code></td>
</tr>
<tr>
<td>3</td>
<td>中国联通</td>
<td>155~156</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^15\d{8}$</code></td>
</tr>
<tr>
<td>4</td>
<td>中国联通</td>
<td>166</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^166\d{8}$</code></td>
</tr>
<tr>
<td>5</td>
<td>中国联通</td>
<td>175~176</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^17\d{8}$</code></td>
</tr>
<tr>
<td>6</td>
<td>中国联通</td>
<td>185~186</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^18\d{8}$</code></td>
</tr>
</tbody>
</table>
</div>
<h2>电信</h2>
<div class="table-box">
<table>
<thead>
<tr><th>序号</th><th>运营商</th><th>号码</th><th>长度</th><th>备注</th><th>正则规则</th></tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>中国电信</td>
<td>133</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^133\d{8}$</code></td>
</tr>
<tr>
<td>2</td>
<td>中国电信</td>
<td>149</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^149\d{8}$</code></td>
</tr>
<tr>
<td>3</td>
<td>中国电信</td>
<td>153</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^153\d{8}$</code></td>
</tr>
<tr>
<td>4</td>
<td>中国电信</td>
<td>173</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^173\d{8}$</code></td>
</tr>
<tr>
<td>5</td>
<td>中国电信</td>
<td>177</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^177\d{8}$</code></td>
</tr>
<tr>
<td>6</td>
<td>中国电信</td>
<td>180</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^180\d{8}$</code></td>
</tr>
<tr>
<td>7</td>
<td>中国电信</td>
<td>181</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^181\d{8}$</code></td>
</tr>
<tr>
<td>8</td>
<td>中国电信</td>
<td>189</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^189\d{8}$</code></td>
</tr>
<tr>
<td>9</td>
<td>中国电信</td>
<td>191</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^191\d{8}$</code></td>
</tr>
<tr>
<td>10</td>
<td>中国电信</td>
<td>199</td>
<td>11</td>
<td>公众移动通信网网号</td>
<td><code>^199\d{8}$</code></td>
</tr>
</tbody>
</table>
</div>
<h2>综合匹配正则</h2>
<p><code>^1((34\d{7})|((3)|(4)|(5)|(66)|(7)|(8)|(9))\d{8})$</code></p>
<p>上述正则有能力优化的同学请留下你的作业<code>o(*^@^*)o</code></p>
<h2>示例</h2>
<pre class="prettyprint"><code class="prism language-php has-numbering"><span class="token comment">// PHP 正则校验手机号合法性
<span class="token keyword">function <span class="token function">check_phone_num<span class="token punctuation">(<span class="token variable">$phone_num<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">if <span class="token punctuation">(<span class="token function">preg_match<span class="token punctuation">(<span class="token double-quoted-string string">"/^1((34\d{7})|((3)|(4)|(5)|(66)|(7)|(8)|(9))\d{8})$/"<span class="token punctuation">, <span class="token variable">$phone_num<span class="token punctuation">)<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">echo <span class="token double-quoted-string string">"合法\n"<span class="token punctuation">;
<span class="token punctuation">} <span class="token keyword">else <span class="token punctuation">{
<span class="token keyword">echo <span class="token double-quoted-string string">"不合法\n"<span class="token punctuation">;
<span class="token punctuation">}
<span class="token punctuation">}
<span class="token comment">// 测试
<span class="token function">check_phone_num<span class="token punctuation">(<span class="token number">1589890023<span class="token punctuation">)<span class="token punctuation">; <span class="token comment">//不合法
<span class="token function">check_phone_num<span class="token punctuation">(<span class="token number">13492787590<span class="token punctuation">)<span class="token punctuation">; <span class="token comment">//不合法
<span class="token function">check_phone_num<span class="token punctuation">(<span class="token number">17612343210<span class="token punctuation">)<span class="token punctuation">; <span class="token comment">//合法
<span class="token function">check_phone_num<span class="token punctuation">(<span class="token number">16199008987<span class="token punctuation">)<span class="token punctuation">; <span class="token comment">//不合法
<span class="token function">check_phone_num<span class="token punctuation">(<span class="token number">17099008987<span class="token punctuation">)<span class="token punctuation">; <span class="token comment">//不合法
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h2>提示</h2>
<ol>
<li>严格意义上来讲,类似这种<code>/^1\d{9}$/</code>写法是不够严谨的,可能造成后续短信验证号码为空的情况,从而丧失获取手机号的作用;</li>
<li>根据需求需要对一些特别号段,比如上述号段在匹配时,我们不允许卫星电话号段注册;</li>
<li>需要关注工信部相关的新闻,及时更新匹配规则。</li>
</ol>
<h2>勘误</h2>
<p>欢迎各位发现数据存在问题的同学及时评论勘误!</p>
<hr>
<h2>数据来源:</h2>
<ol>
<li>电信网编号计划(2017年版)</li>
<li>百度知道-184号段是中国移动的吗?</li>
<li>百度知道-目前中国联通的号段有哪些</li>
<li>百度知道-中国电信号码段都有哪些</li>
</ol>
<p> </p>
<p>转自:https://blog.csdn.net/Chinakeep/article/details/106093218?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf</p><br><br>
来源:https://www.cnblogs.com/nxmxl/p/13686711.html
頁:
[1]