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

PHP 正則判斷純字母/數字/字母數字混合的完整範例

     編輯:PHP 相關知識

前言

表單驗證常需檢查「是否純字母」、「是否純數字」、「是否字母數字混合」。本文提供最簡潔的正則模式、PHP 完整範例、擴充模式(含底線、中文)與效能建議。

核心正則模式

檢查項目正則模式說明
純字母(大小寫)/^[a-z]+$/i`i` 忽略大小寫,`+` 至少一個
純數字/^\d+$/`\d` 等同 `[0-9]`
字母+數字(至少各一)/^(?=.*[a-z])(?=.*\d)[a-z\d]+$/i正向前瞻確保同時含字母與數字
字母+數字(允許純字母/純數字)/^[a-z\d]+$/i僅限字母數字組成
字母+數字+底線/^[\w]+$/`\w` = `[a-zA-Z0-9_]`
中文+字母+數字+底線/^[\w\x{4e00}-\x{9fa5}]+$/uUTF-8 需 `u` 修飾符

完整 PHP 範例

<?php
header('Content-Type: text/html; charset=utf-8');

$tests = [
    '純字母' => 'dasdadsfsadASDSADS',
    '純數字' => '4312',
    '字母數字' => 'fd4fd34',
    '含底線' => 'user_name123',
    '含中文' => '用戶user123',
    '含特殊符號' => 'user@123',
];

$patterns = [
    '純字母' => '/^[a-z]+$/i',
    '純數字' => '/^\d+$/',
    '字母數字(含底線)' => '/^[\w]+$/',
    '中英數底線' => '/^[\w\x{4e00}-\x{9fa5}]+$/u',
];

foreach ($tests as $label => $str) {
    echo "$label: $str
\n"; foreach ($patterns as $pname => $pattern) { $matched = (bool)preg_match($pattern, $str); echo " $pname: " . ($matched ? '✅ 符合' : '❌ 不符合') . "
\n"; } echo "
\n"; }

輸出結果

純字母: dasdadsfsadASDSADS
  純字母: ✅ 符合
  純數字: ❌ 不符合
  字母數字(含底線): ✅ 符合
  中英數底線: ✅ 符合

純數字: 4312
  純字母: ❌ 不符合
  純數字: ✅ 符合
  字母數字(含底線): ✅ 符合
  中英數底線: ✅ 符合

字母數字: fd4fd34
  純字母: ❌ 不符合
  純數字: ❌ 不符合
  字母數字(含底線): ✅ 符合
  中英數底線: ✅ 符合

含底線: user_name123
  純字母: ❌ 不符合
  純數字: ❌ 不符合
  字母數字(含底線): ✅ 符合
  中英數底線: ✅ 符合

含中文: 用戶user123
  純字母: ❌ 不符合
  純數字: ❌ 不符合
  字母數字(含底線): ❌ 不符合
  中英數底線: ✅ 符合

含特殊符號: user@123
  所有模式: ❌ 不符合

進階:密碼強度驗證正則

// 至少 8 字元、含大小寫字母、數字、特殊符號
$strongPwd = '/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$/';

if (preg_match($strongPwd, $password)) {
    echo '密碼強度足夠';
} else {
    echo '密碼需含大小寫字母、數字、特殊符號,長度≥8';
}

效能與最佳實踐

  • 編譯快取:PHP 會自動快取最近使用的正則(PCRE cache),同一模式重複呼叫極快。
  • 錨點 `^$` 必加:避免部分匹配導致誤判(如 `/[a-z]/` 會匹配 `a1`)。
  • UTF-8 必加 `u` 修飾符**:否則中文會被視為多個位元組字元,導致邏輯錯誤。
  • 避免過度複雜正則**:密碼強度等複雜規則,建議拆分為多個簡單檢查(長度、含大寫、含數字...),可讀性與維護性更好。
  • 內建函式優先**:`ctype_alpha()`、`ctype_digit()`、`ctype_alnum()` 針對 ASCII 字元極快且無正則開銷。

內建函式替代方案(ASCII 專用)

$str = 'Hello123';
ctype_alpha($str);  // false
ctype_digit($str);  // false
ctype_alnum($str);  // true(字母+數字)
ctype_alnum('Hello'); // true
ctype_alnum('123');   // true

// 注意:ctype 系列**不支援中文**,遇到非 ASCII 直接回傳 false
ctype_alpha('中文'); // false

總結

判斷字元組成:**ASCII 純字母/數字用 `ctype_*` 最快最簡潔**;**需支援中文/底線/自訂字元集用正則**,記得加 `^$` 錨點與 `u` 修飾符。將常用模式封裝為 `Validator::isAlpha($str)`、`Validator::isAlnum($str)` 等靜態方法,全專案統一呼叫,避免散落正則難以維護。

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