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

PHP 內建 filter 過濾器驗證 Email、URL、IP 等常見格式

     編輯:PHP 相關知識

早期 PHP 開發者習慣用正則表達式驗證 Email、URL、IP 位址等格式,但正則難寫、難維護,且容易遺漏邊界案例。其實 PHP 5.2+ 內建的 filter_var() 搭配 FILTER_VALIDATE_* 系列常數,已能涵蓋大多數常見驗證需求,程式碼更簡潔、可讀性更高。

常用驗證範例

1. 驗證 Email

$email = 'jb51@qq.com';
$result = filter_var($email, FILTER_VALIDATE_EMAIL);
var_dump($result); // string(14) "jb51@qq.com" 通過則回傳原值,失敗回傳 false

2. 驗證 URL

$url = "https://www.jb51.net";
$result = filter_var($url, FILTER_VALIDATE_URL);
var_dump($result); // string(22) "https://www.jb51.net"

3. 驗證 IPv4 / IPv6

$ipv4 = "192.168.1.110";
$result = filter_var($ipv4, FILTER_VALIDATE_IP);
var_dump($result); // string(13) "192.168.1.110"

$ipv6 = "2001:DB8:2de::e13";
$result = filter_var($ipv6, FILTER_VALIDATE_IP);
var_dump($result); // string(17) "2001:DB8:2de::e13"

4. 驗證整數並限制範圍

FILTER_VALIDATE_INT 可搭配 options 參數指定 min_range、max_range:

$i = '010';
$result = filter_var(
    $i,
    FILTER_VALIDATE_INT,
    array('options' => array('min_range' => 1, 'max_range' => 100))
);
var_dump($result); // bool(false) 因為 010 被視為八進位 8,不在 1~100 範圍內

// 對比:若直接用比較運算子,PHP 弱型別會將 '010' 轉為 10,導致誤判
$i = '010';
$result = $i >= 1 && $i <= 100;
var_dump($result); // bool(true) —— 這就是為何要用 filter_var 的原因

5. 驗證浮點數

$float = 12.312;
$result = filter_var($float, FILTER_VALIDATE_FLOAT);
var_dump($result); // float(12.312)

進階提示

  • FILTER_VALIDATE_EMAIL 預設不支援國際化網域名稱(IDN),若需支援可先用 idn_to_ascii() 轉碼再驗證。
  • FILTER_VALIDATE_URL 預設要求包含 scheme(如 https://),若需允許無 scheme 的網址,可加上 FILTER_FLAG_SCHEME_REQUIRED、FILTER_FLAG_HOST_REQUIRED 等旗標組合控制。
  • 所有驗證失敗時均回傳 false,方便統一錯誤處理。

善用內建過濾器,不只能減少正則錯誤,也能讓程式碼更符合現代 PHP 最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved