<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 本文将介绍如何使用PHP中的preg_match函数来验证手机号格式。</span></span><span>
</span><span><span class="hljs-comment">// 我们会提供详细的正则表达式解析和实际示例,帮助你理解和应用。</span></span><span>
</span><span><span class="hljs-comment">// --------------------------------------------------------------</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<h1>用preg_match函数验证手机号格式:详细正则表达式写法和示例</h1>
<p>在Web开发中,用户注册、信息填写等场景经常需要对手机号进行格式校验。PHP中可以使用<strong>preg_match</strong>函数结合<strong>正则表达式</strong>来完成这一功能。本文将详细介绍如何使用preg_match函数验证中国大陆的手机号格式。</p>
<h2></span><span><span class="hljs-number">1</span></span><span>. preg_match函数简介</h2>
<p>preg_match是PHP中用于正则表达式匹配的函数,其语法如下:</p>
<pre><code></span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$subject</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> &</span><span><span class="hljs-variable">$matches</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$flags</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>)
其中:
中国大陆的手机号一般为11位,以1开头,第二位数字通常为3-9。具体规则如下:
根据这个规则,可以写出如下正则表达式:
<span class="fun">/^</span><span><span class="hljs-number">1</span></span><span>[</span><span><span class="hljs-number">3</span></span><span>-</span><span><span class="hljs-number">9</span></span><span>]\d{</span><span><span class="hljs-number">9</span></span><span>}$/</span>
<?php
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">isValidPhoneNumber</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$number</span></span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">'/^1[3-9]\d{9}$/'</span></span><span>, </span><span><span class="hljs-variable">$number</span></span><span>) === </span><span><span class="hljs-number">1</span></span><span>;
}
</span><span><span class="hljs-comment">// 示例:</span></span><span>
</span><span><span class="hljs-variable">$numbers</span></span><span> = [
</span><span><span class="hljs-string">'13812345678'</span></span><span>, </span><span><span class="hljs-comment">// 合法</span></span><span>
</span><span><span class="hljs-string">'19900000000'</span></span><span>, </span><span><span class="hljs-comment">// 合法</span></span><span>
</span><span><span class="hljs-string">'12812345678'</span></span><span>, </span><span><span class="hljs-comment">// 非法(第二位不是3-9)</span></span><span>
</span><span><span class="hljs-string">'1391234567'</span></span><span>, </span><span><span class="hljs-comment">// 非法(长度不足)</span></span><span>
</span><span><span class="hljs-string">'139123456789'</span></span><span> </span><span><span class="hljs-comment">// 非法(长度过长)</span></span><span>
];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$numbers</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$num</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">isValidPhoneNumber</span></span><span>(</span><span><span class="hljs-variable">$num</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$num</span></span></span><span> 是合法的手机号\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$num</span></span></span><span> 是非法的手机号\n";
}
}
?>
使用preg_match结合合适的正则表达式可以高效地验证手机号格式。对于常规项目,这种方式简单、快速、准确,能有效避免非法手机号进入系统。
当然,对于更复杂的验证需求(如结合运营商号段、国际号码等),可以进一步优化正则表达式或使用专门的号码库进行校验。