本驗證類採用策略模式設計,核心優勢在於「規則即方法」——新增驗證規則只需在類中添加對應方法,無需修改核心邏輯。支援單規則、多規則、帶參數規則三種定義方式,靈活適應各種業務場景。
require_once './Validator.class.php';
$data = [
'nickname' => 'heno',
'realname' => 'steven',
'age' => 25,
'mobile' => '1521060426'
];
$validator = new Validator($data);
// 定義驗證規則
$validator->setRule('nickname', 'required');
$validator->setRule('realname', ['length' => [1, 6], 'required']);
$validator->setRule('age', ['required', 'digit']);
$validator->setRule('mobile', ['mobile']);
// 執行驗證
$result = $validator->validate();
var_dump($result); // bool(true/false)
var_dump($validator->getResultInfo()); // 詳細失敗信息
class Validator {
private $_data; // 待驗證數據
private $_ruleList; // 驗證規則集
private $_result; // 整體結果
private $_resultInfo; // 詳細錯誤信息
// 核心驗證邏輯:遍歷規則,動態調用同名方法
public function validate($data = null) { ... }
// 內建驗證方法示例
public function required($varName) { ... } // 必填
public function length($varName, $len) { ... } // 長度範圍
public function email($varName) { ... } // 郵箱格式
public function mobile($varName) { ... } // 手機號(支援 13/14/15/18 開頭)
public function digit($varName) { ... } // 純數字
public function url($varName) { ... } // URL 格式
}
新增身份證驗證只需添加一個方法:
public function idCard($varName) {
$id = $this->_data[$varName] ?? '';
// 實現 18 位身份證校驗邏輯(地址碼、出生日期、校驗碼)
return $this->checkIdCard($id);
}
隨後即可像內建規則一樣使用:`$validator->setRule('idcard', 'idCard');`
此驗證類結構清晰、擴展性強,適合中小型項目快速構建表單驗證體系。生產環境建議整合 Laravel Validator 或 Symfony Validator 獲得更豐富的內建規則與本地化支援。