表單驗證常需檢查「是否純字母」、「是否純數字」、「是否字母數字混合」。本文提供最簡潔的正則模式、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}]+$/u | UTF-8 需 `u` 修飾符 |
<?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';
}
$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)` 等靜態方法,全專案統一呼叫,避免散落正則難以維護。