<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # [表單驗證類](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#id29) CodeIgniter 提供了一個全面的表單驗證和數據預處理類可以幫你少寫很多代碼。 Page Contents [TOC=2,3] ## 概述 在解釋 CodeIgniter 的數據驗證處理之前,讓我們先描述一下一般的情況: 1. 顯示一個表單。 2. 你填寫并提交了它。 3. 如果你提交了一些無效的信息,或者可能漏掉了一個必填項, 表單將會重新顯示你的數據,并提示一個錯誤信息。 4. 這個過程將繼續,直到你提交了一個有效的表單。 在接收端,腳本必須: 1. 檢查必填的數據。 2. 驗證數據類型是否為正確,條件是否滿足。例如,如果提交一個用戶名, 必須驗證它是否只包含了允許的字符,必須有一個最小長度,不能超過最大長度。 用戶名不能和已存在的其他人名字相同,或者不能是某個保留字,等等。 3. 為確保安全性對數據進行過濾。 4. 如果需要,預格式化數據(數據需要清除空白嗎?需要 HTML 編碼?等等) 5. 準備數據,插入數據庫。 盡管上面的過程并不是很復雜,但是通常需要編寫很多代碼,而且為了顯示錯誤信息, 在網頁中經常要使用多種不同的控制結構。表單驗證雖然簡單,但是實現起來卻非常枯燥。 ## 表單驗證指南 下面是實現 CodeIgniter 表單驗證的一個簡易教程。 為了進行表單驗證,你需要這三樣東西: 1. 一個包含表單的?[視圖](http://codeigniter.org.cn/user_guide/general/views.html)?文件。 2. 一個包含“成功”信息的視圖文件,在成功提交后將被顯示。 3. 一個接收并處理所提交數據的?[控制器](http://codeigniter.org.cn/user_guide/general/controllers.html)?方法。 讓我們以一個會員注冊表單為例來創建這三樣東西。 ### 表單 使用文本編輯器創建一個名為 myform.php 的文件,在它里面插入如下代碼, 并把它保存到你的 applications/views/ 目錄下: ~~~ <html> <head> <title>My Form</title> </head> <body> <?php echo validation_errors(); ?> <?php echo form_open('form'); ?> <h5>Username</h5> <input type="text" name="username" value="" size="50" /> <h5>Password</h5> <input type="text" name="password" value="" size="50" /> <h5>Password Confirm</h5> <input type="text" name="passconf" value="" size="50" /> <h5>Email Address</h5> <input type="text" name="email" value="" size="50" /> <div><input type="submit" value="Submit" /></div> </form> </body> </html> ~~~ ### 成功頁面 使用文本編輯器創建一個名為 formsuccess.php 的文件,在它里面插入如下代碼, 并把它保存到你的 applications/views/ 目錄下: ~~~ <html> <head> <title>My Form</title> </head> <body> <h3>Your form was successfully submitted!</h3> <p><?php echo anchor('form', 'Try it again!'); ?></p> </body> </html> ~~~ ### 控制器 使用文本編輯器創建一個名為 Form.php 的控制器文件,在它里面插入如下代碼, 并把它保存到你的 application/controllers/ 目錄下: ~~~ <?php class Form extends CI_Controller { public function index() { $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } } } ~~~ ### 試一下! 訪問類似于下面這樣的 URL 來體驗一下你的表單: ~~~ example.com/index.php/form/ ~~~ 如果你提交表單,你會看到表單只是簡單重新加載了,這是因為你還沒有設置任何驗證規則。 **由于你還沒有告訴表單驗證類驗證什么東西,它默認返回 FALSE, ``run()`` 方法只在全部成功匹配了你的規則后才會返回 TRUE 。** ### 解釋 在這個頁面上你會注意到以下幾點: 例子中的表單(myform.php)是一個標準的 Web 表單,除了以下兩點: 1. 它使用了一個 表單輔助函數 來創建表單的起始標簽。,嚴格來說這并不是必要的, 你完全可以使用標準的 HTML 來創建,使用輔助函數的好處是它生成 action 的時候, 是基于你配置文件來生成 URL 的,這使得你的應用在更改 URL 時更具移植性。 2. 在表單的頂部你將注意到如下函數調用: ~~~ <?php echo validation_errors(); ?> ~~~ 這個函數將會返回驗證器返回的所有錯誤信息。如果沒有錯誤信息,它將返回空字符串。 控制器(Form.php)有一個方法:?index()?。這個方法初始化驗證類, 并加載你視圖中用到的 表單輔助函數 和 URL 輔助函數,它也會 執行 驗證流程, 基于驗證是否成功,它會重新顯示表單或顯示成功頁面。 ### 設置驗證規則 CodeIgniter 允許你為單個表單域創建多個驗證規則,按順序層疊在一起, 你也可以同時對表單域的數據進行預處理。要設置驗證規則, 可以使用set_rules()?方法: ~~~ $this->form_validation->set_rules(); ~~~ 上面的方法有?**三個**?參數: 1. 表單域名 - 就是你給表單域取的那個名字。 2. 表單域的 "人性化" 名字,它將被插入到錯誤信息中。例如, 如果你有一個表單域叫做 “user” ,你可能會給它一個人性化的名字叫做 “用戶名” 。 3. 為此表單域設置的驗證規則。 4. (可選的)當此表單域設置自定義的錯誤信息,如果沒有設置該參數,將使用默認的。 > 注解 > 如果你想讓表單域的名字保存在一個語言文件里,請參考?[翻譯表單域名稱](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#translating-field-names) 下面是個例子,在你的控制器(Form.php)中緊接著驗證初始化函數之后,添加這段代碼: ~~~ $this->form_validation->set_rules('username', 'Username', 'required'); $this->form_validation->set_rules('password', 'Password', 'required'); $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required'); $this->form_validation->set_rules('email', 'Email', 'required'); ~~~ 你的控制器現在看起來像這樣: ~~~ <?php class Form extends CI_Controller { public function index() { $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); $this->form_validation->set_rules('username', 'Username', 'required'); $this->form_validation->set_rules('password', 'Password', 'required', array('required' => 'You must provide a %s.') ); $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required'); $this->form_validation->set_rules('email', 'Email', 'required'); if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } } } ~~~ 現在如果你不填寫表單就提交,你將會看到錯誤信息。如果你填寫了所有的表單域并提交,你會看到成功頁。 > 注解 > 當出現錯誤時表單頁將重新加載,所有的表單域將會被清空,并沒有被重新填充。 稍后我們再去處理這個問題。 ### 使用數組來設置驗證規則 在繼續之前請注意,如果你更喜歡通過一個操作設置所有規則的話, 你也可以使用一個數組來設置驗證規則,如果你使用這種方式, 你必須像下面這樣來定義你的數組: ~~~ $config = array( array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required', 'errors' => array( 'required' => 'You must provide a %s.', ), ), array( 'field' => 'passconf', 'label' => 'Password Confirmation', 'rules' => 'required' ), array( 'field' => 'email', 'label' => 'Email', 'rules' => 'required' ) ); $this->form_validation->set_rules($config); ~~~ ### 級聯規則(Cascading Rules) CodeIgniter 允許你將多個規則連接在一起。讓我們試一試,修改規則設置函數中的第三個參數,如下: ~~~ $this->form_validation->set_rules( 'username', 'Username', 'required|min_length[5]|max_length[12]|is_unique[users.username]', array( 'required' => 'You have not provided %s.', 'is_unique' => 'This %s already exists.' ) ); $this->form_validation->set_rules('password', 'Password', 'required'); $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required|matches[password]'); $this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]'); ~~~ 上面的代碼設置了以下規則: 1. 用戶名表單域長度不得小于 5 個字符、不得大于 12 個字符。 2. 密碼表單域必須跟密碼確認表單域的數據一致。 3. 電子郵件表單域必須是一個有效郵件地址。 馬上試試看!提交不合法的數據后你會看到新的錯誤信息,跟你設置的新規則相符。 還有很多其他的驗證規則,你可以閱讀驗證規則參考。 > 注解 > 你也可以傳一個包含規則的數組給?set_rules()?方法來替代字符串,例如: > ~~~ > $this->form_validation->set_rules('username', 'Username', array('required', 'min_length[5]')); > ~~~ ### 預處理數據 除了上面我們使用的那些驗證函數,你還可以以多種方式來預處理你的數據。 例如,你可以設置像這樣的規則: ~~~ $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]'); $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[8]'); $this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required|matches[password]'); $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email'); ~~~ 在上面的例子里,我們去掉字符串兩端空白(trimming),檢查字符串的長度,確保兩次輸入的密碼一致。 **任何只有一個參數的 PHP 原生函數都可以被用作一個規則,比如 ``htmlspecialchars``, ``trim`` 等等。** > 注解 > 你一般會在驗證規則**之后**使用預處理功能,這樣如果發生錯誤,原數據將會被顯示在表單。 ### 重新填充表單 目前為止我們只是在處理錯誤,是時候用提交的數據重新填充表單了。 CodeIgniter 為此提供了幾個輔助函數,你最常用到的一個是: ~~~ set_value('field name') ~~~ 打開 myform.php 視圖文件并使用?[set_value()](http://codeigniter.org.cn/user_guide/helpers/form_helper.html#set_value "set_value")?函數更新每個表單域的?**值**?: **不要忘記在 :php:func:`set_value()` 函數中包含每個表單域的名字!** ~~~ <html> <head> <title>My Form</title> </head> <body> <?php echo validation_errors(); ?> <?php echo form_open('form'); ?> <h5>Username</h5> <input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" /> <h5>Password</h5> <input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" /> <h5>Password Confirm</h5> <input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" /> <h5>Email Address</h5> <input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" /> <div><input type="submit" value="Submit" /></div> </form> </body> </html> ~~~ 現在刷新你的頁面并提交表單觸發一個錯誤,你的表單域應該被重新填充了。 > 注解 > 下面的?[類參考](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#class-reference)?節包含了可以讓你重填下拉菜單,單選框和復選框的函數。 重要 如果你使用一個數組作為一個表單域的名字,那么函數的參數也應該是一個數組。例如: ~~~ <input type="text" name="colors[]" value="<?php echo set_value('colors[]'); ?>" size="50" /> ~~~ 更多信息請參考下面的?[使用數組作為域名稱](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#using-arrays-as-field-names)?一節。 ### 回調:你自己的驗證函數 驗證系統支持設置你自己的驗證函數,這樣你可以擴展驗證類以適應你自己的需求。 例如,如果你需要查詢數據庫來檢查用戶名是否唯一,你可以創建一個回調函數, 讓我們來新建一個例子。 在你的控制器中,將用戶名的規則修改為: ~~~ $this->form_validation->set_rules('username', 'Username', 'callback_username_check'); ~~~ 然后在你的控制器中添加一個新的方法?username_check()?。你的控制器現在看起來是這樣: ~~~ <?php class Form extends CI_Controller { public function index() { $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); $this->form_validation->set_rules('username', 'Username', 'callback_username_check'); $this->form_validation->set_rules('password', 'Password', 'required'); $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required'); $this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]'); if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } } public function username_check($str) { if ($str == 'test') { $this->form_validation->set_message('username_check', 'The {field} field can not be the word "test"'); return FALSE; } else { return TRUE; } } } ~~~ 重新載入表單并以 “test” 作為用戶名提交數據,你會看到表單域數據被傳遞到你的回調函數中處理了。 要調用一個回調函數只需把函數名加一個 "callback_"?**前綴**并放在驗證規則里。 如果你需要在你的回調函數中調用一個額外的參數,你只需要在回調函數后面用[]把參數 (這個參數只能是字符串類型)括起來,例如:"callback_foo**[bar]**" , 其中 bar 將成為你的回調函數中的第二個參數。 > 注解 > 你也可以對傳給你的表單數據進行處理并返回,如果你的回調函數返回了除布爾型的 TRUE 或 FALSE 之外的任何值,它將被認為是你新處理過的表單數據。 ### 使用任何可調用的方法作為驗證規則 如果回調的規則對你來說還不夠好(譬如,它們被限制只能定義在控制器中), 別失望,還有一種方法來創建自定義的規則:任何?is_callable()?函數返回 TRUE 的東西都可以作為規則。 看下面的例子: ~~~ $this->form_validation->set_rules( 'username', 'Username', array( 'required', array($this->users_model, 'valid_username') ) ); ~~~ 上面的代碼將使用?Users_model?模型的?valid_username()?方法來作為驗證規則。 當然,這只是個例子,規則不只限于使用模型的方法,你可以使用任何對象和方法 來接受域值作為第一個參數。如果你使用 PHP 5.3+ ,還可以使用匿名方法: ~~~ $this->form_validation->set_rules( 'username', 'Username', array( 'required', function($value) { // Check $value } ) ); ~~~ 但是,由于可調用的規則并不是一個字符串,也沒有一個規則名,所以當你需要為它們設置 相應的錯誤消息時會有麻煩。為了解決這個問題,你可以將這樣的規則放到一個數組的第二個值, 第一個值放置規則名: ~~~ $this->form_validation->set_rules( 'username', 'Username', array( 'required', array('username_callable', array($this->users_model, 'valid_username')) ) ); ~~~ 下面是使用匿名方法(PHP 5.3+)的版本: ~~~ $this->form_validation->set_rules( 'username', 'Username', array( 'required', array( 'username_callable', function($str) { // Check validity of $str and return TRUE or FALSE } ) ) ); ~~~ ### 設置錯誤信息 所有原生的錯誤信息都位于下面的語言文件中:?**language/english/form_validation_lang.php** 如果要為某個規則設置你的自定義信息你可以編輯那個文件,或使用下面的方法: ~~~ $this->form_validation->set_message('rule', 'Error Message'); ~~~ 如果你要為某個域的某個規則設置你的自定義信息,可以使用 set_rules() 方法: ~~~ $this->form_validation->set_rules('field_name', 'Field Label', 'rule1|rule2|rule3', array('rule2' => 'Error Message on rule2 for this field_name') ); ~~~ 其中, rule 是該規則的名稱,Error Message 為該規則顯示的錯誤信息。 如果你希望在錯誤信息中包含域的人性化名稱,或者某些規則設置的一個可選參數 (例如:max_length),你可以在消息中使用?**{field}**?和?**{param}**?標簽: ~~~ $this->form_validation->set_message('min_length', '{field} must have at least {param} characters.'); ~~~ 如果域的人性化名稱為 Username ,并有一個規則 min_length[5] ,那么錯誤信息會顯示: "Username must have at least 5 characters." > 注解 > 老的?sprintf()?方法和在字符串使用?**%s**?也還可以工作,但是會覆寫掉上面的標簽。 所以你同時只應該使用兩個中的一個。 在上面回調的例子中,錯誤信息是通過方法的名稱(不帶 "callback_" 前綴)來設置的: ~~~ $this->form_validation->set_message('username_check') ~~~ ### 翻譯表單域名稱 如果你希望將傳遞給?set_rules()?方法的人性化名稱存儲在一個語言文件中, 使他們能被翻譯成其他語言,你可以這么做: 首先,給人性化名稱添加一個前綴:**lang:**,如下: > $this->form_validation->set_rules('first_name', 'lang:first_name', 'required'); 然后,將該名稱保存到你的某個語言文件數組中(不帶前綴): ~~~ $lang['first_name'] = 'First Name'; ~~~ > 注解 > 如果你保存的語言文件沒有自動被 CI 加載,你要記住在你的控制器中使用下面的方法手工加載: ~~~ $this->lang->load('file_name'); ~~~ 關于語言文件的更多信息,參看?[語言類](http://codeigniter.org.cn/user_guide/libraries/language.html)?。 ### 更改錯誤定界符 在默認情況下,表單驗證類會使用 標簽來分割每條錯誤信息。 你可以通過全局的,單獨的,或者通過配置文件對其進行自定義。 1. **全局的修改定界符**?要在全局范圍內修改錯誤定界符,你可以在控制器方法中加載表單驗證類之后,使用下面的代碼: ~~~ $this->form_validation->set_error_delimiters('<div class="error">', '</div>'); ~~~ 在這個例子中,我們改成使用 標簽來作為定界符。 2. **單獨的修改定界符**?有兩個錯誤生成方法可以用于設置它們自己的定界符,如下: ~~~ <?php echo form_error('field name', '<div class="error">', '</div>'); ?> ~~~ 或者: ~~~ <?php echo validation_errors('<div class="error">', '</div>'); ?> ~~~ 3. **在配置文件中設置定界符**?你還可以在配置文件 application/config/form_validation.php 中定義錯誤定界符,如下: ~~~ $config['error_prefix'] = '<div class="error_prefix">'; $config['error_suffix'] = '</div>'; ~~~ ### 單獨顯示錯誤 如果你喜歡緊挨著每個表單域顯示錯誤信息而不是顯示為一個列表, 你可以使用?[form_error()](http://codeigniter.org.cn/user_guide/helpers/form_helper.html#form_error "form_error")?方法。 嘗試一下!修改你的表單如下: ~~~ <h5>Username</h5> <?php echo form_error('username'); ?> <input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" /> <h5>Password</h5> <?php echo form_error('password'); ?> <input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" /> <h5>Password Confirm</h5> <?php echo form_error('passconf'); ?> <input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" /> <h5>Email Address</h5> <?php echo form_error('email'); ?> <input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" /> ~~~ 如果沒有錯誤信息,將不會顯示。如果有錯誤信息,將會在輸入框的旁邊單獨顯示。 重要 如果你使用一個數組作為一個表單域的名字,那么函數的參數也應該是一個數組。例如: ~~~ <?php echo form_error('options[size]'); ?> <input type="text" name="options[size]" value="<?php echo set_value("options[size]"); ?>" size="50" /> ~~~ 更多信息,請參考下面的?[使用數組作為域名稱](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#using-arrays-as-field-names)?一節。 ### 驗證數組(除 $_POST 數組) 有時你可能希望對一個單純的數組進行驗證,而不是對?$_POST?數組。 在這種情況下,你可以先定義要驗證的數組: ~~~ $data = array( 'username' => 'johndoe', 'password' => 'mypassword', 'passconf' => 'mypassword' ); $this->form_validation->set_data($data); ~~~ 創建驗證規則,運行驗證,獲取錯誤消息和上面說講的那些驗證?$_POST?數組是一樣的。 >[danger] 重要 > 如果你想驗證多個數組,那么你應該在驗證下一個新數組之前先調用?reset_validation()?方法。 更多信息,請參數下面的?[類參考](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#class-reference)?一節。 ## 將一系列驗證規則保存到一個配置文件 表單驗證類的一個不錯的特性是,它允許你將整個應用的所有驗證規則存儲到一個配置文件中去。 你可以對這些規則進行分組,這些組既可以在匹配控制器和方法時自動加載,也可以在需要時手動調用。 ### 如何保存你的規則 如果要保存驗證規則,你需要在 application/config/ 目錄下創建一個名為 form_validation.php 的文件。 然后在該文件中,將驗證規則保存在數組 $config 中即可。和之前介紹的一樣,驗證規則數組格式如下: ~~~ $config = array( array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required' ), array( 'field' => 'passconf', 'label' => 'Password Confirmation', 'rules' => 'required' ), array( 'field' => 'email', 'label' => 'Email', 'rules' => 'required' ) ); ~~~ 你的驗證規則會被自動加載,當用戶觸發?run()?方法時被調用。 請務必要將數組名稱定義成?$config?。 ### 創建規則集 為了將你的多個規則組織成規則集,你需要將它們放置到子數組中。 請參考下面的例子,在此例中我們設置了兩組規則集,我們分別命名為 "signup" 和 "email" ,你可以根據自己的需求任意命名: ~~~ $config = array( 'signup' => array( array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required' ), array( 'field' => 'passconf', 'label' => 'Password Confirmation', 'rules' => 'required' ), array( 'field' => 'email', 'label' => 'Email', 'rules' => 'required' ) ), 'email' => array( array( 'field' => 'emailaddress', 'label' => 'EmailAddress', 'rules' => 'required|valid_email' ), array( 'field' => 'name', 'label' => 'Name', 'rules' => 'required|alpha' ), array( 'field' => 'title', 'label' => 'Title', 'rules' => 'required' ), array( 'field' => 'message', 'label' => 'MessageBody', 'rules' => 'required' ) ) ); ~~~ ### 調用某組驗證規則 為了調用特定組的驗證規則,你可以將它的名稱傳給?run()?方法。 例如,使用 signup 規則你可以這樣: ~~~ if ($this->form_validation->run('signup') == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } ~~~ ### 將控制器方法和規則集關聯在一起 調用一組規則的另一種方法是將控制器方法和規則集關聯在一起(這種方法也更自動), 例如,假設你有一個控制器類 Member 和一個方法 signup ,你的類如下: ~~~ <?php class Member extends CI_Controller { public function signup() { $this->load->library('form_validation'); if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } } } ~~~ 在你的驗證規則配置文件中,使用 member/signup 來給這組規則集命名: ~~~ $config = array( 'member/signup' => array( array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required' ), array( 'field' => 'passconf', 'label' => 'PasswordConfirmation', 'rules' => 'required' ), array( 'field' => 'email', 'label' => 'Email', 'rules' => 'required' ) ) ); ~~~ 當一組規則的名稱和控制器類/方法名稱完全一樣時,它會在該控制器類/方法中自動被?run()?方法調用。 ## 使用數組作為域名稱 表單驗證類支持使用數組作為域名稱,比如: ~~~ <input type="text" name="options[]" value="" size="50" /> ~~~ 如果你將域名稱定義為數組,那么在使用域名稱作為參數的?[輔助函數函數](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#helper-functions)?時, 你必須傳遞給他們與域名稱完全一樣的數組名,對這個域名稱的驗證規則也一樣。 例如,為上面的域設置驗證規則: ~~~ $this->form_validation->set_rules('options[]', 'Options', 'required'); ~~~ 或者,為上面的域顯示錯誤信息: ~~~ <?php echo form_error('options[]'); ?> ~~~ 或者,重新填充該域的值: ~~~ <input type="text" name="options[]" value="<?php echo set_value('options[]'); ?>" size="50" /> ~~~ 你也可以使用多維數組作為域的名稱,例如: ~~~ <input type="text" name="options[size]" value="" size="50" /> ~~~ 甚至: ~~~ <input type="text" name="sports[nba][basketball]" value="" size="50" /> ~~~ 和上面的例子一樣,你必須在輔助函數中使用完全一樣的數組名: ~~~ <?php echo form_error('sports[nba][basketball]'); ?> ~~~ 如果你正在使用復選框(或其他擁有多個選項的域),不要忘了在每個選項后加個空的方括號, 這樣,所有的選擇才會被添加到 POST 數組中: ~~~ <input type="checkbox" name="options[]" value="red" /> <input type="checkbox" name="options[]" value="blue" /> <input type="checkbox" name="options[]" value="green" /> ~~~ 或者,使用多維數組: ~~~ <input type="checkbox" name="options[color][]" value="red" /> <input type="checkbox" name="options[color][]" value="blue" /> <input type="checkbox" name="options[color][]" value="green" /> ~~~ 當你使用輔助函數時,也要添加方括號: ~~~ <?php echo form_error('options[color][]'); ?> ~~~ ## 規則參考 下表列出了所有可用的原生規則: | 規則 | 參數 | 描述 | 例子 | | --- | --- | --- | --- | | **required** | No | 如果表單元素為空,返回 FALSE | ? | | **matches** | Yes | 如果表單元素值與參數中對應的表單字段的值不相等,返回 FALSE | matches[form_item] | | **regex_match** | Yes | 如果表單元素不匹配正則表達式,返回 FALSE | regex_match[/regex/] | | **differs** | Yes | 如果表單元素值與參數中對應的表單字段的值相等,返回 FALSE | differs[form_item] | | **is_unique** | Yes | 如果表單元素值在指定的表和字段中并不唯一,返回 FALSE 注意:這個規則需要啟用[查詢構造器](http://codeigniter.org.cn/user_guide/database/query_builder.html) | is_unique[table.field] | | **min_length** | Yes | 如果表單元素值的長度小于參數值,返回 FALSE | min_length[3] | | **max_length** | Yes | 如果表單元素值的長度大于參數值,返回 FALSE | max_length[12] | | **exact_length** | Yes | 如果表單元素值的長度不等于參數值,返回 FALSE | exact_length[8] | | **greater_than** | Yes | 如果表單元素值小于或等于參數值或非數字,返回 FALSE | greater_than[8] | | **greater_than_equal_to** | Yes | 如果表單元素值小于參數值或非數字,返回 FALSE | greater_than_equal_to[8] | | **less_than** | Yes | 如果表單元素值大于或等于參數值或非數字,返回 FALSE | less_than[8] | | **less_than_equal_to** | Yes | 如果表單元素值大于參數值或非數字,返回 FALSE | less_than_equal_to[8] | | **in_list** | Yes | 如果表單元素值不在規定的列表中,返回 FALSE | in_list[red,blue,green] | | **alpha** | No | 如果表單元素值包含除字母以外的其他字符,返回 FALSE | ? | | **alpha_numeric** | No | 如果表單元素值包含除字母和數字以外的其他字符,返回 FALSE | ? | | **alpha_numeric_spaces** | No | 如果表單元素值包含除字母、數字和空格以外的其他字符,返回 FALSE 應該在 trim 之后使用,避免首尾的空格 | ? | | **alpha_dash** | No | 如果表單元素值包含除字母/數字/下劃線/破折號以外的其他字符,返回 FALSE | ? | | **numeric** | No | 如果表單元素值包含除數字以外的字符,返回 FALSE | ? | | **integer** | No | 如果表單元素包含除整數以外的字符,返回 FALSE | ? | | **decimal** | No | 如果表單元素包含非十進制數字時,返回 FALSE | ? | | **is_natural** | No | 如果表單元素值包含了非自然數的其他數值 (不包括零),返回 FALSE 自然數形如:0、1、2、3 .... 等等。 | ? | | **is_natural_no_zero** | No | 如果表單元素值包含了非自然數的其他數值 (包括零),返回 FALSE 非零的自然數:1、2、3 .... 等等。 | ? | | **valid_url** | No | 如果表單元素值包含不合法的 URL,返回 FALSE | ? | | **valid_email** | No | 如果表單元素值包含不合法的 email 地址,返回 FALSE | ? | | **valid_emails** | No | 如果表單元素值包含不合法的 email 地址(地址之間用逗號分割),返回 FALSE | ? | | **valid_ip** | No | 如果表單元素值不是一個合法的 IP 地址,返回 FALSE 通過可選參數 "ipv4" 或 "ipv6" 來指定 IP 地址格式。 | ? | | **valid_base64** | No | 如果表單元素值包含除了 base64 編碼字符之外的其他字符,返回 FALSE | ? | 注解 這些規則也可以作為獨立的函數被調用,例如: ~~~ $this->form_validation->required($string); ~~~ > 注解 > 你也可以使用任何一個接受兩個參數的原生 PHP 函數(其中至少有一個參數是必須的,用于傳遞域值) ## 預處理參考 下表列出了所有可用的預處理方法: | 名稱 | 參數 | 描述 | | --- | --- | --- | | **prep_for_form** | No | 將特殊字符的轉換,以便可以在表單域中顯示 HTML 數據,而不會破壞它 | | **prep_url** | No | 當 URL 丟失 "[http://](http://codeigniter.org.cn/user_guide/libraries/form_validation.html)" 時,添加 "[http://](http://codeigniter.org.cn/user_guide/libraries/form_validation.html)" | | **strip_image_tags** | No | 移除 HTML 中的 image 標簽,只保留 URL | | **encode_php_tags** | No | 將 PHP 標簽轉成實體 | > 注解 > 你也可以使用任何一個接受一個參數的原生 PHP 函數。 例如:?trim()?、?htmlspecialchars()?、?urldecode()?等 ## 類參考 classCI_Form_validation >[info] ### set_rules($field[,?$label = ''[,?$rules = '']]) 參數: * **$field**?(string) -- Field name * **$label**?(string) -- Field label * **$rules**?(mixed) -- Validation rules, as a string list separated by a pipe "|", or as an array or rules 返回: CI_Form_validation instance (method chaining) 返回類型: CI_Form_validation 允許您設置驗證規則,如在本教程上面描述的: * [設置驗證規則](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#setting-validation-rules) * [將一系列驗證規則保存到一個配置文件](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#saving-groups) >[info] ### run([$group = '']) 參數: * **$group**?(string) -- The name of the validation group to run 返回: TRUE on success, FALSE if validation failed 返回類型: bool 運行驗證程序。成功返回 TRUE,失敗返回 FALSE。 您也可以傳一個驗證規則集的名稱作為參數,參考?[將一系列驗證規則保存到一個配置文件](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#saving-groups) set_message($lang[,?$val = '']) 參數: * **$lang**?(string) -- The rule the message is for * **$val**?(string) -- The message 返回: CI_Form_validation instance (method chaining) 返回類型: CI_Form_validation 允許您設置自定義錯誤消息,參考?[設置錯誤信息](http://codeigniter.org.cn/user_guide/libraries/form_validation.html#setting-error-messages) >[info] ### set_error_delimiters([$prefix = ''[,?$suffix = '']]) 參數: * **$prefix**?(string) -- Error message prefix * **$suffix**?(string) -- Error message suffix 返回: CI_Form_validation instance (method chaining) 返回類型: CI_Form_validation 設置錯誤消息的前綴和后綴。 >[info] ### set_data($data) 參數: * **$data**?(array) -- Array of data validate 返回: CI_Form_validation instance (method chaining) 返回類型: CI_Form_validation 允許你設置一個數組來進行驗證,取代默認的?$_POST?數組 >[info] ### reset_validation() 返回: CI_Form_validation instance (method chaining) 返回類型: CI_Form_validation 當你驗證多個數組時,該方法可以重置驗證規則,當驗證下一個新數組時應該調用它。 >[info] ### error_array() 返回: Array of error messages 返回類型: array 返回錯誤信息數組。 >[info] ### error_string([$prefix = ''[,?$suffix = '']]) 參數: * **$prefix**?(string) -- Error message prefix * **$suffix**?(string) -- Error message suffix 返回: Error messages as a string 返回類型: string 返回所有的錯誤信息(和 error_array() 返回結果一樣),并使用換行符分割格式化成字符串 >[info] ### error($field[,?$prefix = ''[,?$suffix = '']]) 參數: * **$field**?(string) -- Field name * **$prefix**?(string) -- Optional prefix * **$suffix**?(string) -- Optional suffix 返回: Error message string 返回類型: string 返回特定域的錯誤消息,也可以添加一個前綴和/或后綴(通常是 HTML 標簽) >[info] ### has_rule($field) 參數: * **$field**?(string) -- Field name 返回: TRUE if the field has rules set, FALSE if not 返回類型: bool 檢查某個域是否有驗證規則。 ## 輔助函數參考 請參考?[表單輔助函數](http://codeigniter.org.cn/user_guide/helpers/form_helper.html)?手冊了解以下函數: * [form_error()](http://codeigniter.org.cn/user_guide/helpers/form_helper.html#form_error "form_error") * [validation_errors()](http://codeigniter.org.cn/user_guide/helpers/form_helper.html#validation_errors "validation_errors") * [set_value()](http://codeigniter.org.cn/user_guide/helpers/form_helper.html#set_value "set_value") * [set_select()](http://codeigniter.org.cn/user_guide/helpers/form_helper.html#set_select "set_select") * [set_checkbox()](http://codeigniter.org.cn/user_guide/helpers/form_helper.html#set_checkbox "set_checkbox") * [set_radio()](http://codeigniter.org.cn/user_guide/helpers/form_helper.html#set_radio "set_radio") 注意這些都是過程式的函數,所以?**不需要**?添加?$this->form_validation?就可以直接調用它們。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看