【问题标题】:custom validation methods not working when using 'CI' in codeigniter form validation在 codeigniter 表单验证中使用“CI”时,自定义验证方法不起作用
【发布时间】:2012-09-04 07:42:58
【问题描述】:

嗨,我正在使用 codeigniter 表单验证。

在我的库中我设置了表单验证

$this->ci->form_validation->set_rules ( 'businessemail', 'Business Email', 'required|xss_clean|min_length[6]|callback_valid_email_check' );

还有我的valid_email_check 函数

public function valid_email_check($email_address)
{
    if(!trim($email_address))
    {
        return TRUE;
    }
    $email_explode = explode("@", $email_address);

    $valid = preg_match("/^(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/",trim($email_explode[0]));

    if(!$valid)
    {
        $this->ci->form_validation->set_message('valid_email_check', 'The %s field contains invalid charaters');
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}

事情是这样的

required|xss_clean|min_length[6]

验证正确,只是自定义验证消息不起作用。

我在这里做了什么,我认为使用CI 可能是问题所在, 这个问题怎么解决,先谢谢了

【问题讨论】:

  • 为什么不使用内置的valid_email方法?
  • @shayan ,我想添加一些自定义验证

标签: php codeigniter validation codeigniter-form-helper


【解决方案1】:

您说您正在库中设置验证规则。根据 CodeIgniter 的用户指南,这应该在 controller 中完成,或者您可以将它们保存在 config file 中。

这样做的目的是什么? -

if(!trim($email_address))
{
    return TRUE;
}

这个逻辑对我来说似乎有点倒退,例如,如果你将一个空字符串传递给函数,它将返回TRUE。除非我没有抓住重点,否则这不是您想要实现的目标。

您可以将trim 添加到您的$this-&gt;ci-&gt;form_validation-&gt;set_rules 参数中,然后将其从您的valid_email_check 函数中删除。

只使用 CI 的 valid_email 规则有什么问题?除非你有充分的理由,否则没有必要重新发明轮子。

这是一个可接受的解决方案吗? -

$this->ci->form_validation->set_rules ('businessemail', 'Business Email', 'trim|required|xss_clean|min_length[6]|valid_email');

如果您扩展了form_validation 库并且这是您的功能所在,那么您不需要在其前面加上callback_

【讨论】:

    【解决方案2】:

    你怎么知道自定义验证不起作用?

    下面返回什么?

    public function valid_email_check($email_address)
    {
         this->ci->form_validation->set_message('valid_email_check', 'The %s field contains invalid charaters'); 
         return FALSE;
    }
    

    另外 - 您的 valid_email_check 在哪里?即它在什么文件中?

    【讨论】:

    • valid_email_check函数在同一个文件中,公共函数valid_email_check()
    • 直接运行该函数是否有效(没有 CI 的表单验证)?将其设置为根据 false 或 true 回显某些内容。
    • 您的 valid_email_check 在哪里?即它在什么文件中? - 很好的问题。如果您要扩展 form_validation 库,则无需在函数前面加上 callback_
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多