# PHP怎么利用正則過濾字符
正則表達式(Regular Expression)是處理字符串的強大工具,PHP通過內置的PCRE(Perl Compatible Regular Expressions)庫提供了完整的正則支持。本文將詳細介紹PHP中利用正則表達式進行字符過濾的7種核心方法,包含基礎語法、實用函數和典型應用場景。
## 一、正則表達式基礎語法
### 1. 定界符與元字符
PHP正則通常以`/`作為定界符:
```php
$pattern = '/\d+/'; // 匹配1個或多個數字
常用元字符:
- . 匹配任意單個字符(換行符除外)
- \d 數字字符 [0-9]
- \w 單詞字符 [a-zA-Z0-9_]
- \s 空白字符(空格、制表符等)
* 0次或多次+ 1次或多次? 0次或1次{n} 精確n次{n,} 至少n次{n,m} n到m次// 匹配手機號
$pattern = '/^1[3-9]\d{9}$/';
// 分組捕獲
$pattern = '/(\d{4})-(\d{2})-(\d{2})/';
$email = "test@example.com";
if (preg_match('/^[\w\.-]+@[\w\.-]+\.\w+$/', $email)) {
echo "有效郵箱";
}
$text = "價格:¥199,特價¥89";
preg_match_all('/¥(\d+)/', $text, $matches);
print_r($matches[1]); // 輸出 [199, 89]
// 過濾HTML標簽
$clean = preg_replace('/<[^>]+>/', '', $html);
// 敏感詞替換
$words = ['敏感詞1', '敏感詞2'];
$pattern = '/'.implode('|', $words).'/i';
$text = preg_replace($pattern, '***', $text);
與preg_replace()類似,但只返回發生替換的結果
$keywords = preg_split('/\s*,\s*/', "php, mysql, apache");
// 移除非字母數字字符
$safe = preg_replace('/[^\w]/', '', $input);
// 更精確的數值過濾
if (!preg_match('/^-?\d+$/', $id)) {
die("非法ID參數");
}
// 移除所有JavaScript事件
$clean = preg_replace(
'/on\w+=[\'"].*?[\'"]/i',
'',
$html
);
$filename = preg_replace(
'/[^\w\.-]/',
'',
basename($_FILES['file']['name'])
);
$pattern = '@\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))@';
?啟用非貪婪模式preg_match('/<div>(.*?)<\/div>/', $html, $match);
(?>...)提升匹配效率$pattern = '/\b(?>integer|int|float)\b/';
// UTF-8編碼下的中文匹配
preg_match('/[\x{4e00}-\x{9fa5}]+/u', $text);
// 使用s修飾符使.匹配換行符
preg_match('/<div>(.*)<\/div>/s', $html);
// 使用m修飾符處理多行
preg_match_all('/^#\s(.+)$/m', $markdown, $titles);
// 匹配嵌套的括號
$pattern = '/\(([^()]|(?R))*\)/';
preg_match_all('/[?&]([^=]+)=([^&]+)/', $url, $matches);
$params = array_combine($matches[1], $matches[2]);
// 要求8-20位,含大小寫和數字
$valid = preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\w]{8,20}$/', $pwd);
preg_match_all('/\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\]/', $log, $timestamps);
正則測試工具:
調試方法:
// 檢查正則錯誤
if (preg_last_error() !== PREG_NO_ERROR) {
echo "正則錯誤: ". preg_last_error_msg();
}
$start = microtime(true);
preg_match($pattern, $text);
echo "耗時: ". (microtime(true)-$start) . "秒";
正則表達式在PHP中實現字符過濾時,需要注意: 1. 始終對用戶輸入進行過濾 2. 復雜正則要添加注釋說明 3. 考慮使用FILTER_VAR等替代方案處理簡單場景 4. 重要過濾應當多重驗證
通過合理運用正則表達式,可以構建高效安全的字符串過濾系統,有效防御各類注入攻擊和數據污染問題。
附錄:常用正則速查表 - 郵箱:
/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/- URL:/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/- IPv4:/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/“`
本文共計約1900字,涵蓋從基礎語法到高級應用的完整知識體系,實際使用時可根據具體需求調整正則模式。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。