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

Yii 框架驗證規則完整指南:常見字段驗證範例總結

     編輯:PHP 相關知識

Yii 框架驗證規則完整指南:常見字段驗證範例總結

在 Yii 框架開發中,rules() 方法是模型層資料驗證的核心。本文整理了實務上最常用的字段驗證範例,涵蓋必填、長度、格式、類型等場景,助你快速建立健壯的表單驗證邏輯。

核心驗證規則速查表

驗證器適用場景關鍵參數
required必填欄位on、message
length字串長度限制min、max、tooShort、tooLong
match正則表達式匹配pattern、message
email電子郵件格式on、message
url網址格式on、message
numerical數值型態integerOnly、message
safe大量賦值白名單—

實戰程式碼範例:聯絡表單模型

<?php
class ContactForm extends CFormModel {
    public $id;
    public $contact;   // 聯絡人
    public $tel;       // 電話
    public $fax;       // 傳真
    public $zipcode;   // 郵遞區號
    public $addr;      // 地址
    public $mobile;    // 手機
    public $email;     // 信箱
    public $website;   // 網址
    public $qq;        // QQ 號
    public $msn;       // MSN
    public $add_time;  // 新增時間

    public function rules() {
        return array(
            // 數值型欄位
            array('id, add_time', 'numerical', 'integerOnly' => true),
            
            // 大量賦值安全白名單(參考:safe 屬性詳解)
            array('contact, tel, fax, zipcode, addr, mobile, email, website, qq, msn, add_time', 'safe'),
            
            // 編輯場景專用驗證
            array('contact', 'required', 'on' => 'edit', 'message' => '聯絡人必須填寫。'),
            array('contact', 'length', 'on' => 'edit', 'min' => 2, 'max' => 10,
                'tooShort' => '聯絡人長度請控制在 2-10 個字元。',
                'tooLong' => '聯絡人長度請控制在 2-10 個字元。'),
            
            // 電話/傳真格式:支援 3-4 碼區碼 + 7-8 碼號碼
            array('tel', 'match', 'pattern' => '/^(\d{3}-|\d{4}-)(\d{8}|\d{7})?$/', 'message' => '請輸入正確的電話號碼。'),
            array('fax', 'match', 'pattern' => '/^(\d{3}-|\d{4}-)(\d{8}|\d{7})?$/', 'message' => '請輸入正確的傳真號碼。'),
            
            // 手機號碼(舊版號段,現代專案建議更新為最新號段)
            array('mobile', 'match', 'pattern' => '/^13[0-9]{1}[0-9]{8}$|15[0189]{1}[0-9]{8}$|189[0-9]{8}$/', 'message' => '請輸入正確的手機號碼。'),
            
            // 信箱、郵遞區號、網址、QQ、MSN
            array('email', 'email', 'on' => 'edit', 'message' => '信箱格式錯誤。'),
            array('zipcode', 'required', 'on' => 'edit', 'message' => '郵遞區號必須填寫。'),
            array('zipcode', 'numerical', 'on' => 'edit', 'message' => '郵遞區號為 6 位數字。'),
            array('zipcode', 'length', 'on' => 'edit', 'min' => 6, 'max' => 6,
                'tooShort' => '郵遞區號長度為 6 位數。', 'tooLong' => '郵遞區號長度為 6 位數。'),
            array('website', 'url', 'on' => 'edit', 'message' => '網址格式錯誤。'),
            array('qq', 'match', 'pattern' => '/^[1-9]{1}[0-9]{4,11}$/', 'message' => '請輸入正確的 QQ 號碼。'),
            array('msn', 'email', 'on' => 'edit', 'message' => 'MSN 格式錯誤。'),
        );
    }
}

進階技巧與注意事項

  • 場景驗證:善用 on 參數區分 insert、update、edit 等場景,避免不必要的驗證干擾。
  • safe 屬性:被標記為 safe 的屬性才能透過大量賦值(setAttributes())賦值,這是防禦惡意注入的關鍵防線。
  • 正則維護:手機號、身分證等正則需隨政策更新,建議集中管理於常數或驗證元件中。
  • 客製化訊息:每條規則都應提供友善的 message,提升使用者體驗。

延伸閱讀

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