首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 正則表達式匹配中文完整指南:GBK 與 UTF-8 編碼差異詳解

     編輯:PHP 相關知識

前言

在 PHP 開發中處理中文字符匹配看似簡單,但不同編碼(GBK、UTF-8)下的正則寫法卻大相逕庭。本文將系統梳理兩種主流編碼環境下的中文匹配方案,並提供可直接落地的代碼示例。

一、GBK 編碼環境下的中文正則

GBK 編碼中,漢字佔用兩個字節,第一字節範圍 \x81-\xFE,第二字節範圍 \x40-\xFE(排除 \x7F)。基於此特性,我們可以構造對應正則。

1. 判斷字符串是否全為漢字

<?php
$str = '全部是漢字測試';
if (preg_match_all("/^([\x81-\xFE][\x40-\xFE])+$/", $str, $match)) {
    echo '全部是漢字';
} else {
    echo '不全是漢字';
}
?>

測試結果:

  • $str = '全部是漢字測試' → 輸出「全部是漢字」
  • $str = 'all全部是漢字測試' → 輸出「不全是漢字」

2. 判斷字符串是否包含漢字

<?php
$str = '漢字3測試';
if (preg_match("/([\x81-\xFE][\x40-\xFE])/", $str, $match)) {
    echo '含有漢字';
} else {
    echo '不含有漢字';
}
?>

測試結果:

  • $str = '漢字3測試' → 輸出「含有漢字」
  • $str = 'abc345' → 輸出「不含有漢字」
注意:上述變量 $str 的編碼格式(UTF-8 或 GBK)不影響判斷結果,關鍵在於正則模式與字符串實際編碼一致。

二、UTF-8 編碼環境下的中文正則

UTF-8 下漢字對應 Unicode 範圍 U+4E00–U+9FA5(基本 CJK 統一表意文字)。PHP 需配合 u 修飾符啟用 Unicode 模式。

判斷字符串是否全為中文

<?php
$str = "php編程";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u", $str)) {
    print("該字符串全部是中文");
} else {
    print("該字符串不全部是中文");
}
?>

三、最佳實踐建議

  1. 統一編碼:項目建議全鏈路使用 UTF-8,避免編碼轉換帶來的隱患。
  2. 善用 u 修飾符:UTF-8 正則必須加 u,否則會按字節匹配導致錯誤。
  3. 擴展範圍:如需覆蓋擴展區漢字,可改用 \p{Han}(需 PCRE 8.1+),例:/^\p{Han}+$/u。
  4. 性能考量:大量文本處理時,優先考慮 mb_check_encoding() 或 mb_ereg() 等多字節原生函數。

四、常見陷阱速查表

場景GBK 正則UTF-8 正則
純中文檢測/^([\x81-\xFE][\x40-\xFE])+$//^[\x{4e00}-\x{9fa5}]+$/u
包含中文檢測/([\x81-\xFE][\x40-\xFE])//[\x{4e00}-\x{9fa5}]/u
中英數混合提取較複雜,建議轉 UTF-8 處理/[\x{4e00}-\x{9fa5}a-zA-Z0-9]+/u

掌握編碼與正則的對應關係,才能在中文處理場景中游刃有餘。希望本文能為你的開發工作提供清晰參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved