UTF-8 環境下匹配中文: /^[\x{4e00}-\x{9fa5}]+$/u
GBK/GB2312 環境下匹配中文: /^[".chr(0xa1)."-".chr(0xff)."]+$/
\x{...} 和 u 修飾符?\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 "含非法字符";
}
}
?>
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-8 | U+4E00 ~ U+9FA5 | /^[\x{4e00}-\x{9fa5}]+$/u | 大括號 + u 修飾符 |
| GBK/GB2312 | 0xA1A1 ~ 0xFEFE | /^[".chr(0xa1)."-".chr(0xff)."]+$/ | 單字節範圍,無需 u |