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

10 個實用 PHP 正則表達式範例:驗證 Email、手機、IP 等常見場景

     編輯:PHP 相關知識

10 個實用 PHP 正則表達式範例:驗證 Email、手機、IP 等常見場景

正則表達式是處理字串匹配、驗證與萃取的利器。本文整理 10 個常見場景的 PHP 正則寫法,並說明優缺點與替代方案,助你快速套用專案中。

1. 驗證 Email 地址

正則版:

<?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 規範,且效能更好。

2. 驗證使用者名稱

限制:英數字、底線,長度 5~20 字元。

<?php
$username = 'user_name12';
if (preg_match('/^[a-z\d_]{5,20}$/i', $username)) {
    echo '使用者名稱格式正確';
} else {
    echo '格式錯誤:僅限英數字與底線,5-20 字元';
}
?>

3. 驗證電話號碼(美式格式)

支援 (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 '電話格式錯誤';
}
?>

4. 驗證 IPv4 位址

<?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 位址無效';
}
?>

5. 驗證郵遞區號(美式 5 碼或 5+4 碼)

<?php
$zip = '12345-5434';
if (preg_match('/^([0-9]{5})(-[0-9]{4})?$/i', $zip)) {
    echo '郵遞區號格式正確';
} else {
    echo '格式錯誤';
}
?>

6. 驗證美國社會安全碼 (SSN)

<?php
$ssn = '333-23-2329';
if (preg_match('/^[\d]{3}-[\d]{2}-[\d]{4}$/', $ssn)) {
    echo 'SSN 格式正確';
} else {
    echo 'SSN 格式錯誤';
}
?>

7. 驗證信用卡號

涵蓋 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 '信用卡號格式錯誤';
}
?>

8. 驗證網域 URL

<?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 格式錯誤';
}
?>

9. 從 URL 萃取網域名稱

<?php
$url = 'https://example.com/articles';
preg_match('@^(?:https://)?([^/]+)@i', $url, $matches);
$host = $matches[1];
echo $host; // 輸出:example.com
?>

10. 關鍵字高亮顯示

將文章中的「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;
?>

最佳實務提醒

  • 複雜驗證(如 Email、URL)優先使用 filter_var() 內建過濾器。
  • 正則表達式需注意效能,避免過度回溯導致 ReDoS 攻擊。
  • 使用 x 修飾符可在模式中加入註解與空白,提升可讀性。
  • 單元測試覆蓋邊界案例(空字串、超長輸入、特殊字元)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved