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

PHP 表單驗證類別:常用正則驗證方法整理

     編輯:PHP 綜合知識

表單驗證是 Web 應用的基礎防線。本文整理一個實用的 class_post 驗證類別,涵蓋字母數字、純數字、中文字、身分證、Email、電話、郵遞區號、URL 等常見格式檢查,並提供資料清理與輸出轉義方法。

驗證方法總覽

方法用途參數說明
fun_text1($min, $max, $str)英數混合長度驗證最小/最大長度、待檢字串
fun_text2($min, $max, $str)純數字長度驗證同上
fun_font($min, $max, $str)中文字長度驗證同上(Big5/GBK 環境適用)
fun_status($str)身分證字號格式15/18 位數字或 17 碼+X
fun_email($str)Email 格式標準 RFC 5322 簡化版
fun_phone($str)電話號碼支援區碼、分機格式
fun_zip($str)郵遞區號6 位數字,首位非 0
fun_url($str)URL 格式以 https:// 開頭

資料處理輔助方法

資料入庫前轉義 data_join(&$data)

自動偵測 get_magic_quotes_gpc(),對字串或一維陣列執行 addslashes(),防止 SQL 注入(註:現代應用請改用 Prepared Statements)。

資料出庫還原 data_revert(&$data)

對字串或多維陣列執行 stripslashes(),還原原始資料。

輸出顯示處理 data_show(&$data)

執行 nl2br()、htmlspecialchars() 及空白轉換,安全輸出 HTML 內容。建議先呼叫 data_revert()。

完整類別碼(已去重整理)

<?php
class class_post {
    // 驗證英數混合長度
    public function fun_text1($min, $max, $str) {
        return (bool) preg_match("/^[a-zA-Z0-9]{{$min},{$max}}$/", $str);
    }

    // 驗證純數字長度
    public function fun_text2($min, $max, $str) {
        return (bool) preg_match("/^[0-9]{{$min},{$max}}$/i", $str);
    }

    // 驗證中文字長度(雙位元編碼環境)
    public function fun_font($min, $max, $str) {
        return (bool) preg_match("/^([\x81-\xfe][\x40-\xfe]){{$min},{$max}}$/", $str);
    }

    // 身分證字號
    public function fun_status($str) {
        return (bool) preg_match('/^([\d]{15}|[\d]{18}|[\d]{17}[xX])$/', $str);
    }

    // Email
    public function fun_email($str) {
        return (bool) preg_match('/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,}$/i', $str);
    }

    // 電話
    public function fun_phone($str) {
        return (bool) preg_match('/^((\d{3})|(\d{3}-))?(0\d{2,3}|0\d{2,3}-)?[1-9]\d{6,7}$/', $str);
    }

    // 郵遞區號
    public function fun_zip($str) {
        return (bool) preg_match('/^[1-9]\d{5}$/', $str);
    }

    // URL
    public function fun_url($str) {
        return (bool) preg_match('/^https?:\/\/[A-Za-z0-9\-\.]+\.[A-Za-z]{2,}(\/\S*)?$/', $str);
    }

    // 入庫轉義
    public function data_join(&$data) {
        if (!get_magic_quotes_gpc()) {
            if (is_array($data)) {
                foreach ($data as $k => $v) $data[$k] = addslashes($v);
            } else {
                $data = addslashes($data);
            }
        }
        return $data;
    }

    // 出庫還原
    public function data_revert(&$data) {
        if (is_array($data)) {
            foreach ($data as $k1 => $v1) {
                if (is_array($v1)) {
                    foreach ($v1 as $k2 => $v2) $data[$k1][$k2] = stripslashes($v2);
                } else {
                    $data[$k1] = stripslashes($v1);
                }
            }
        } else {
            $data = stripslashes($data);
        }
        return $data;
    }

    // 輸出顯示
    public function data_show(&$data) {
        if (is_array($data)) {
            foreach ($data as $k1 => $v1) {
                if (is_array($v1)) {
                    foreach ($v1 as $k2 => $v2) {
                        $data[$k1][$k2] = nl2br(htmlspecialchars($data[$k1][$k2]));
                        $data[$k1][$k2] = str_replace(' ', '&nbsp;', $data[$k1][$k2]);
                        $data[$k1][$k2] = str_replace("\n", '<br>', $data[$k1][$k2]);
                    }
                } else {
                    $data[$k1] = nl2br(htmlspecialchars($data[$k1]));
                    $data[$k1] = str_replace(' ', '&nbsp;', $data[$k1]);
                    $data[$k1] = str_replace("\n", '<br>', $data[$k1]);
                }
            }
        } else {
            $data = nl2br(htmlspecialchars($data));
            $data = str_replace(' ', '&nbsp;', $data);
            $data = str_replace("\n", '<br>', $data);
        }
        return $data;
    }
}
?>

使用範例

$validator = new class_post();
$email = 'test@example.com';
if ($validator->fun_email($email)) {
    echo 'Email 格式正確';
} else {
    echo 'Email 格式錯誤';
}

現代化建議

  • 優先使用 PHP 內建 filter_var() 搭配 FILTER_VALIDATE_EMAIL 等過濾器。
  • 資料庫操作請改用 PDO Prepared Statements,勿依賴 addslashes。
  • 中文長度驗證建議改用 mb_strlen() 搭配 UTF-8 編碼。
  • 考慮引入 Respect/Validation 或 Symfony Validator 等成熟驗證套件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved