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

PHP 正則表達式匹配中文(UTF-8/GBK)完整指南

     編輯:PHP 綜合知識

核心結論

UTF-8 環境下匹配中文: /^[\x{4e00}-\x{9fa5}]+$/u
GBK/GB2312 環境下匹配中文: /^[".chr(0xa1)."-".chr(0xff)."]+$/

為什麼需要 \x{...} 和 u 修飾符?

  • PHP PCRE 中 \x{hex} 表示 Unicode 碼點,hex 可為 1-6 位十六進制;
  • 碼點超過 0xFF(如中文 0x4E00-0x9FA5)必須加大括號 \x{4e00};
  • 大於 0xFF 的碼點必須配合 u (PCRE_UTF8) 修飾符,否則報錯或匹配錯誤。

常見錯誤示範

$str = "編程";
// 錯誤 1:無大括號,\x4e00 被解析為 \x4e + "00" 兩個字節
preg_match("/^[\x4e00-\x9fa5]+$/", $str); // 不報錯但匹配失敗

// 錯誤 2:有大括號但無 u 修飾符
preg_match("/^[\x{4e00}-\x{9fa5}]+$/", $str); // Warning: Compilation failed: PCRE does not support \x{...}

// 正確
preg_match("/^[\x{4e00}-\x{9fa5}]+$/u", $str); // 返回 1

完整驗證示例(包含字母、數字、下劃線)

輸入合法";
    } else {
        echo "含非法字符";
    }
}
?>
輸入:

JavaScript 對比

JS 使用 \uXXXX 表示 Unicode 碼點,無需修飾符:

var str = "PHP編程";
if (/^[\u4e00-\u9fa5]+$/.test(str)) {
    console.log("全是中文");
}

擴展:匹配更大範圍中文(含擴展區)

基本區 4E00-9FA5 覆蓋 20,902 個常用漢字。如需覆蓋擴展 A/B/C/D 區(罕用字、人名字等),可使用:

// Unicode 13.0 擴展範圍(示例,實際請查閱最新標準)
$han_extended = '/^[\x{3400}-\x{4DBF}\x{4E00}-\x{9FFF}\x{F900}-\x{FAFF}\x{20000}-\x{2A6DF}\x{2A700}-\x{2B73F}\x{2B740}-\x{2B81F}\x{2B820}-\x{2CEAF}]+$/u';

總結表

編碼中文區間正則模式關鍵點
UTF-8U+4E00 ~ U+9FA5/^[\x{4e00}-\x{9fa5}]+$/u大括號 + u 修飾符
GBK/GB23120xA1A1 ~ 0xFEFE/^[".chr(0xa1)."-".chr(0xff)."]+$/單字節範圍,無需 u
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved