在Codeigniter中获取form_validation> set_rules> valid_email错误

问题描述

在codeigniter框架中,我的代码是:

$this->form_validation->set_rules('mobile','Mobile Number','trim|numeric|exact_length[10]');
$this->form_validation->set_rules('email','Email Address','trim|valid_email');
$this->form_validation->set_rules('address','Address','trim');
if($this->form_validation->run() == TRUE){
    $this->update_info();
}

以上代码会产生以下错误

An uncaught Exception was encountered
Type: Error
Message: Call to undefined method CI_Form_validation::substr()
Filename: D:\xampp\htdocs\ci\system\libraries\Form_validation.PHP
Line Number: 1241

仅检查时,我尝试了两件事并已消除错误,但这不是正确的方法,因此我需要正确的解决方案。

  1. valid_email删除set_rules之后,代码便开始工作了。
  2. 注释文件中的Line Number: 1241(我出错了)system\libraries\Form_validation.PHP
  3. 后,代码正常工作

1241: $str = self::substr($str,++$atpos).idn_to_ascii(self::substr($str,$atpos),INTL_IDNA_VARIANT_UTS46);

Codeigniter版本:3.1.11
PHP版本:7.4.2

解决方法

添加电子邮件助手

$this->load->helper('email');

以这种方式设置电子邮件验证

$this->form_validation->set_rules('email','Email','trim|required|valid_email|xss_clean');

用于手机号码验证

$this->form_validation->set_rules('mobile','Mobile Number ','required|regex_match[/^[0-9]{10}$/]'); //{10} for 10 digits number