fltn03 发表于 2010-10-28 18:24:28

在表单验证类中添加新的表单验证规则

在CI框架中如何添加新的表单规则呢?
比如,我想在进行表单验证的时候,添加一个电话号码的验证规则,或是一个手机号码的验证规则。
我在框架中做了如下偿试,但没有成功:
首先,我找到了/system/libraries/目录下的Form_validation.php和Validation.php,并在两个文件的最后面添加了以下方法:

1.)        function phone($str)
        {
                return ( ! preg_match("/^0\d{2}[-]?\d{8}$|^0\d{3}[-]?\d{7}$/", $str)) ? FALSE : TRUE;
        }       

2.)        function cellphone($str)
        {
                return ( ! preg_match("/^13{1}{8}$|15{1}{8}$|189{8}$/", $str)) ? FALSE : TRUE;
        }
1.)方法用于对电话号码的验证;2.)方法用于对手机号码的验证。其验证方法采用正则表达式的方法进行字符匹配;
第二步:在/system/language/english目录下找到form_validation_lang.php和validation_lang.php两个文件,依然是在这两个文件的最后添加了以下代码:
$lang['is_natural']                        = "The %s field must contain a number.";
$lang['is_natural_no_zero']        = "The %s field must contain a number greater than zero.";
$lang['phone']                                = "%S格式不正确";
$lang['cellphone']                        = "%S格式不正确";
第三步:对我所写的表单进行验证:
我所写的表单代码如下:
<form action="" method="post">
电话:<input type="text" name="phone" value="" maxlength="20">
手机:<input type="text" name="cellphone" value="" maxlength="20">
<input type="submit" value="提交">
</form>
对表单进行验证的代码:
$this->load->library('form_validation');
$this->form_validation->set_rules('phone','电话','phone');
$this->form_validation->set_rules('cellphone','电话','cellphone');
if($this->form_validation->run()==false)
{
   //出现错误时显示提示信息
   $item['Error_message']=1;
}
else
{
   //进行操作代码
}

以上几步操作进行之后,验证没有成功。
本人也是刚刚接触CI,所以就试着改写一下源代码,以便日后使用。但是这种操作方式不一定能行的通,所以在此请高人指点。
如果这个方法行不通,希望能给一个其他的方式。我在教程中有看到说使用用户自定义的表单验证规则,但是我没有看明白。如果有可能,希望能给一个用户自定义的表单验证规则的教程,尽可能的详细点吧。毕竟是新手嘛!呵呵。在此谢过了!

qi_ruo 发表于 2010-10-28 18:43:27

本帖最后由 qi_ruo 于 2010-10-29 17:36 编辑

All you have done is right, maybe something else is wrong.

fltn03 发表于 2010-11-1 09:58:20

回复 2# qi_ruo


   是的,正如你所说的那样,是我程序的其他地方出了问题,这样的操作是正确的。但如果CI版本升级的话,我在这里所写的自定义规则不就被覆盖了吗?请问怎么操作才能保证我所写的东西不被覆盖呢?

chennybo 发表于 2010-11-19 16:34:16


$this->form_validation->set_rules('verifycode','验证码','trim|required|callback_check_login_code');

function _check_login_code
{
if($this->securimage->check($verifycode) == true){
                return true;
            }else{
               $this->form_validation->set_message('check_login_code', '%s 不正确');
               returnfalse;
            }
}

这样就可以扩展验证规则了...


fltn03 发表于 2010-11-20 09:48:38

回复 4# chennybo


    谢谢。看了你刚才的方法,但我还有一个疑问——你所写的这个代码是放在哪个目录下的哪个文件里?是/system/application/libraries/下,还是/system/libraries/下,文件名是什么啊?

visvoy 发表于 2010-11-22 16:52:36

那个是在控制器里面扩展,随控制器走
如果你想扩展验证类,建议不要直接改动源码,ci提供了很方便的扩展方法,
http://codeigniter.org.cn/user_guide/general/creating_libraries.html 查看“扩展现有类”部分

阿咘 发表于 2011-12-20 20:02:43

强烈建议不要修改system内的内容和结构。以便以后更新
页: [1]
查看完整版本: 在表单验证类中添加新的表单验证规则