用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5890|回复: 6
收起左侧

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

[复制链接]
发表于 2010-10-28 18:24:28 | 显示全部楼层 |阅读模式
在CI框架中如何添加新的表单规则呢?
比如,我想在进行表单验证的时候,添加一个电话号码的验证规则,或是一个手机号码的验证规则。
我在框架中做了如下偿试,但没有成功:
首先,我找到了/system/libraries/目录下的Form_validation.phpValidation.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[0-9]{1}[0-9]{8}$|15[0189]{1}[0-9]{8}$|189[0-9]{8}$/", $str)) ? FALSE : TRUE;
        }

1.)方法用于对电话号码的验证;2.)方法用于对手机号码的验证。其验证方法采用正则表达式的方法进行字符匹配;
第二步:在/system/language/english目录下找到form_validation_lang.phpvalidation_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,所以就试着改写一下源代码,以便日后使用。但是这种操作方式不一定能行的通,所以在此请高人指点。
如果这个方法行不通,希望能给一个其他的方式。我在教程中有看到说使用用户自定义的表单验证规则,但是我没有看明白。如果有可能,希望能给一个用户自定义的表单验证规则的教程,尽可能的详细点吧。毕竟是新手嘛!呵呵。在此谢过了!
发表于 2010-10-28 18:43:27 | 显示全部楼层
本帖最后由 qi_ruo 于 2010-10-29 17:36 编辑

All you have done is right, maybe something else is wrong.
 楼主| 发表于 2010-11-1 09:58:20 | 显示全部楼层
回复 2# qi_ruo


   是的,正如你所说的那样,是我程序的其他地方出了问题,这样的操作是正确的。但如果CI版本升级的话,我在这里所写的自定义规则不就被覆盖了吗?请问怎么操作才能保证我所写的东西不被覆盖呢?
发表于 2010-11-19 16:34:16 | 显示全部楼层
PHP复制代码
 
$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 不正确');
               return  false;
            }
}
 
这样就可以扩展验证规则了...
 
 
 
复制代码

点评

这个最简单了  发表于 2011-10-23 13:25
 楼主| 发表于 2010-11-20 09:48:38 | 显示全部楼层
回复 4# chennybo


    谢谢。看了你刚才的方法,但我还有一个疑问——你所写的这个代码是放在哪个目录下的哪个文件里?是/system/application/libraries/下,还是/system/libraries/下,文件名是什么啊?
发表于 2010-11-22 16:52:36 | 显示全部楼层
那个是在控制器里面扩展,随控制器走
如果你想扩展验证类,建议不要直接改动源码,ci提供了很方便的扩展方法,
http://codeigniter.org.cn/user_g ... ting_libraries.html 查看“扩展现有类”部分
发表于 2011-12-20 20:02:43 | 显示全部楼层
强烈建议不要修改system内的内容和结构。以便以后更新

本版积分规则