當前位置: 首頁> 最新文章列表> 用preg_match函數驗證手機號格式:詳細正則表達式寫法和示例

用preg_match函數驗證手機號格式:詳細正則表達式寫法和示例

gitbox 2025-08-07
<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>)

其中:

  • $pattern :要匹配的正則表達式
  • $subject :要搜索的字符串
  • $matches :如果提供,將填充所有匹配的結果

2 . 中國大陸手機號格式

中國大陸的手機號一般為11位,以1開頭,第二位數字通常為3 - 9 。具體規則如下:

  • 1位為1
  • 2位為3 - 9之間的任意數字
  • 後面9位為0 - 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>

3 . 示例代碼
&lt;?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";
    }
}
?&gt;

4 . 正則表達式詳解
  • ^ :匹配字符串的開始
  • 1 :手機號第一位必須是1
  • [ 3 - 9 ] :手機號第二位在3 ~ 9之間
  • \d{ 9 } :後面跟9位數字(\d表示數字,{ 9 }表示重複9次)
  • $ :匹配字符串的結束

5 . 小結

使用preg_match結合合適的正則表達式可以高效地驗證手機號格式。對於常規項目,這種方式簡單、快速、準確,能有效避免非法手機號進入系統。

當然,對於更複雜的驗證需求(如結合運營商號段、國際號碼等),可以進一步優化正則表達式或使用專門的號碼庫進行校驗。