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

PHP 與 JavaScript 中文驗證完全指南:從編碼原理到實戰正則

     編輯:PHP 相關知識

判斷字串是否為純中文,核心在於字元編碼範圍。不同編碼(GB2312/GBK、UTF-8)對應的中文區間不同,驗證邏輯也須隨之調整。本文整理 PHP 與 JavaScript 兩大語言的常用寫法,並說明常見陷阱。

編碼背景知識

  • GB2312/GBK:中文字元佔 2 位元組,高位元組範圍 0xA1–0xFE,低位元組 0xA1–0xFE。簡化正則常用 [\xA1-\xFF] 匹配雙位元組字元。
  • UTF-8:中文通常落在 Unicode 範圍 U+4E00–U+9FA5(基本漢字區),對應 UTF-8 三位元組序列 \xE4\xB8\x80–\xE9\xBE\xA5。

PHP 實作

1. GB2312/GBK 環境

$str = "一聚教程網";
if (preg_match('/^['.chr(0xA1).'-'.chr(0xFF).']+$/', $str)) {
    echo "純中文字串";
} else {
    echo "含非中文字元";
}

利用 chr() 動態產生位元組範圍,避免硬編碼。

2. UTF-8 環境(推薦)

$str = "php編程";
if (preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $str)) {
    echo "純中文字串";
}
  • 使用 u 修飾符啟用 Unicode 模式。
  • \x{4e00}-\x{9fa5} 直接對應碼位,不受位元組序列影響,更直觀。

3. 兼容雙編碼的過濾範例

if ($is_utf8) {
    // 保留英數、底線、中文、常見符號
    $joid = preg_replace('/[^0-9a-zA-Z_\-\x{4e00}-\x{9fa5}:\/#.]/u', '', $joid);
} else {
    // GB2312/GBK
    $joid = preg_replace('/[^0-9a-zA-Z_\-\xA1-\xFF:\/#.]/', '', $joid);
}

JavaScript 實作

JS 內部使用 UTF-16,直接匹配 Unicode 碼位最簡單:

var str = "php編程";
if (/^[\u4e00-\u9fa5]+$/.test(str)) {
    alert("全為中文");
} else {
    alert("含非中文");
}
  • \u4e00-\u9fa5 對應基本漢字區。
  • 若需支援擴展區(如 \u3400-\u4DBF),可自行擴充範圍。

常見坑點與建議

  1. 不要用 /^[\u4e00-\u9fa5]+$/ 在 PHP 非 Unicode 模式下 —— 會把 UTF-8 位元組拆開匹配,導致誤判。務必加 u 修飾符。
  2. 輸入可能混雜全形標點、數字 —— 驗證「純中文」時請明確定義是否允許標點、數字、英文,必要時調整字元類別。
  3. 前後端編碼一致性 —— 頁面 <meta charset="utf-8">、資料庫連線 SET NAMES utf8mb4、PHP mb_internal_encoding('UTF-8') 三者保持一致。

總結

中文驗證的本質是碼位範圍判斷。現代專案建議全鏈路使用 UTF-8(或 utf8mb4),在 PHP 用 /^[\x{4e00}-\x{9fa5}]+$/u,在 JS 用 /^[\u4e00-\u9fa5]+$/,簡潔且可維護。

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