正則表達式是處理字串匹配、驗證與萃取的利器。本文整理 10 個常見場景的 PHP 正則寫法,並說明優缺點與替代方案,助你快速套用專案中。
正則版:
<?php
$email = 'test@example.com';
$pattern = '/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/';
if (preg_match($pattern, $email)) {
echo 'Email 格式正確';
} else {
echo 'Email 格式錯誤';
}
?>
建議:實務上推薦使用 PHP 內建 filter_var($email, FILTER_VALIDATE_EMAIL),支援更完整的 RFC 5322 規範,且效能更好。
限制:英數字、底線,長度 5~20 字元。
<?php
$username = 'user_name12';
if (preg_match('/^[a-z\d_]{5,20}$/i', $username)) {
echo '使用者名稱格式正確';
} else {
echo '格式錯誤:僅限英數字與底線,5-20 字元';
}
?>
支援 (021)423-2323、021-423-2323、021.423.2323 等格式。
<?php
$phone = '(021)423-2323';
if (preg_match('/\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x', $phone)) {
echo '電話格式正確';
} else {
echo '電話格式錯誤';
}
?>
<?php
$ip = '192.168.1.78';
$pattern = '/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/';
if (preg_match($pattern, $ip)) {
echo 'IP 位址有效';
} else {
echo 'IP 位址無效';
}
?>
<?php
$zip = '12345-5434';
if (preg_match('/^([0-9]{5})(-[0-9]{4})?$/i', $zip)) {
echo '郵遞區號格式正確';
} else {
echo '格式錯誤';
}
?>
<?php
$ssn = '333-23-2329';
if (preg_match('/^[\d]{3}-[\d]{2}-[\d]{4}$/', $ssn)) {
echo 'SSN 格式正確';
} else {
echo 'SSN 格式錯誤';
}
?>
涵蓋 Visa、MasterCard、Discover、American Express、Diners Club 等主流卡別。
<?php
$cc = '378282246310005';
$pattern = '/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$/';
if (preg_match($pattern, $cc)) {
echo '信用卡號格式正確';
} else {
echo '信用卡號格式錯誤';
}
?>
<?php
$url = 'https://example.com/';
if (preg_match('/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i', $url)) {
echo 'URL 格式正確';
} else {
echo 'URL 格式錯誤';
}
?>
<?php
$url = 'https://example.com/articles';
preg_match('@^(?:https://)?([^/]+)@i', $url, $matches);
$host = $matches[1];
echo $host; // 輸出:example.com
?>
將文章中的「regex」關鍵字包裝 <span> 標籤以便 CSS 樣式化。
<?php
$text = 'Regular expressions (regex) are powerful...';
$text = preg_replace('/\b(regex)\b/i', '<span class="highlight">$1</span>', $text);
echo $text;
?>
filter_var() 內建過濾器。x 修飾符可在模式中加入註解與空白,提升可讀性。