在表单验证类中添加新的表单验证规则
在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-29 17:36 编辑
All you have done is right, maybe something else is wrong. 回复 2# qi_ruo
是的,正如你所说的那样,是我程序的其他地方出了问题,这样的操作是正确的。但如果CI版本升级的话,我在这里所写的自定义规则不就被覆盖了吗?请问怎么操作才能保证我所写的东西不被覆盖呢?
$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;
}
}
这样就可以扩展验证规则了...
回复 4# chennybo
谢谢。看了你刚才的方法,但我还有一个疑问——你所写的这个代码是放在哪个目录下的哪个文件里?是/system/application/libraries/下,还是/system/libraries/下,文件名是什么啊? 那个是在控制器里面扩展,随控制器走
如果你想扩展验证类,建议不要直接改动源码,ci提供了很方便的扩展方法,
http://codeigniter.org.cn/user_guide/general/creating_libraries.html 查看“扩展现有类”部分 强烈建议不要修改system内的内容和结构。以便以后更新
页:
[1]