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

PHP 與 JavaScript 中文漢字正則表達式完整速查表(UTF-8 / GBK)

     編輯:PHP 相關知識

前言

正則匹配中文漢字時,編碼不同(UTF-8 vs GBK/GB2312)、語言不同(PHP vs JS)寫法皆有差異。本文整理最實用的模式,涵蓋「純中文」、「中英數混合」、「長度限制」等常見需求。

核心 Unicode 範圍

常用漢字區間:U+4E00 ~ U+9FA5(CJK Unified Ideographs 基本區)。

PHP 版(PCRE,支援 Unicode 屬性)

1. 純中文(UTF-8)

// 完整字串皆為漢字
if (preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $str)) { ... }

// 允許中英數下劃線
if (preg_match('/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u', $str)) { ... }

關鍵:/u 修飾符啟用 UTF-8 模式,\x{...} 為十六進位 Unicode 碼位。

2. 純中文(GBK/GB2312)

或用更精確的 EUC-CN 範圍(較少用)。

3. 提取字串中的中文

preg_match_all('/[\x{4e00}-\x{9fa5}]+/u', $str, $matches);
// $matches[0] 為所有中文片段陣列

4. 計算中文長度(一中文=2,英數=1)

function mb_strlen_mixed($str) {
    return mb_strlen($str, 'utf-8') + strlen($str) - mb_strlen($str, 'latin1');
    // 簡易近似:總位元組數 - ASCII字元數 = 中文字元數*2 + 英文字元數*1
}

JavaScript 版

1. 純中文

var reg = /^[\u4e00-\u9fa5]+$/;
if (reg.test(str)) { alert('全是漢字'); }

JS 用 \uXXXX 表示 Unicode 碼位。

2. 雙位元組字元(含中文、日文、韓文等)

var reg = /[^\x00-\xff]/; // 匹配非 ASCII 字元

3. 計算混合長度(中文計 2,ASCII 計 1)

String.prototype.len = function() {
    return this.replace(/[^\x00-\xff]/g, 'aa').length;
};

修飾符速查

修飾符意義
u (PHP)模式視為 UTF-8,\x{...} 生效
i大小寫不敏感
s. 匹配換行符
x忽略模式中的空白與註解(可讀性)

長度限制寫法

// PHP: 2-4 個漢字
/^[\x{4e00}-\x{9fa5}]{2,4}$/u

// JS: 2-4 個漢字
/^[\u4e00-\u9fa5]{2,4}$/

實務建議

  • 統一使用 UTF-8:資料庫、PHP 檔案、HTML <meta charset="utf-8">、JS 檔案皆為 UTF-8,避免編碼地獄。
  • 前後端共用正則:將模式定義在共用設定檔,PHP 用 \x{...},JS 用 \u...,以建構腳本同步產出。
  • 不要過度驗證:姓名、地址常含生僻字、符號,建議只檢查「是否包含非法字元(如腳本標籤)」,而非強制純中文。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved