| 修飾符 | 說明 |
| i | 大小寫不敏感 |
| m | 多行模式(^$ 匹配行首尾) |
| s | 單行模式(. 匹配換行) |
| u | UTF-8 模式(處理中文必備) |
| x | 忽略模式中的空白與註解(可讀性) |
常用驗證模式庫
帳號密碼
// 使用者名稱:英數底線,6-20 字元,字母開頭
/^[a-zA-Z][a-zA-Z0-9_]{5,19}$/
// 密碼:8-20 字元,含大小寫、數字、特殊符號
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,20}$/
Email
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
手機號碼(台灣/中國大陸)
// 台灣手機
/^09\d{8}$/
// 中國大陸手機
/^1[3-9]\d{9}$/
URL
/^https?:\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?$/i
身分證字號(台灣)
/^[A-Z][12]\d{8}$/
中文字元
/^[\x{4e00}-\x{9fa5}]+$/u
常用函式速查
| 函式 | 用途 | 回傳值 |
| preg_match | 執行一次匹配 | 1/0/false,匹配結果存第三參數陣列 |
| preg_match_all | 全域匹配 | 匹配次數,結果存第三參數多維陣列 |
| preg_replace | 搜尋替換 | 替換後字串/陣列 |
| preg_split | 正則分割字串 | 陣列 |
| preg_quote | 跳脫正則特殊字元 | 字串 |
| preg_filter | 僅回傳有匹配的替換結果 | 陣列 |
實戰範例
範例 1:驗證並解析日期
<?php
$date = '2024-12-25';
if (preg_match('/^(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})$/', $date, $m)) {
echo "年:{$m['y']} 月:{$m['m']} 日:{$m['d']}";
}
?>
範例 2:HTML 標籤屬性提取
<?php
$html = '<img src="photo.jpg" alt="風景" class="img-responsive">';
preg_match_all('/(\w+)="([^"]*)"/', $html, $m, PREG_SET_ORDER);
foreach ($m as $attr) {
echo "{$attr[1]} = {$attr[2]}\n";
}
// src = photo.jpg
// alt = 風景
// class = img-responsive
?>
範例 3:敏感詞過濾
<?php
$badWords = ['bad', 'evil', 'spam'];
$pattern = '/\b(' . implode('|', array_map('preg_quote', $badWords)) . ')\b/i';
$text = 'This is a bad example with EVIL content.';
$clean = preg_replace($pattern, '***', $text);
echo $clean; // This is a *** example with *** content.
?>
效能與除錯技巧
- ✅ 能用
strpos/str_replace 解決的不要用正則。
- ✅ 複雜模式加
x 修飾符並加註解,提升可維護性。
- ✅ 使用 regex101.com 除錯與解釋模式。
- ⚠️ 避免災難性回溯:慎用
.*、.+,改用具體字元類別。
- ⚠️ 大量資料處理考慮預編譯或非正則替代方案。
正則表達式是文字處理的利器,熟練掌握能大幅提升開發效率,但也要注意可讀性與效能平衡。
copyright ©
萬盛學電腦網 all rights reserved