Yii2比较不区分大小写的电子邮件

时间:2016-07-21 11:53:11

标签: validation yii2 compare

我使用Yii2提供的简单比较验证规则,如下所示:

[confirm_email', 'compare', 'compareAttribute'=>'email', 'message'=>"Emails don't match"],

问题在于此规则比较两封100%的电子邮件,包括Case Sensitive,意味着 email@test.com email@Test.com 会生成验证错误。

有没有办法从此规则中删除此区分大小写的比较?

2 个答案:

答案 0 :(得分:1)

strcasecmp 无法处理多字节字符read this

建议使用strtolower()

您可能也对yii's input filter感兴趣,将输入转换为小写,如下所示:

[
    // both email fields tolower
    [['email', 'confirm_email'], 'filter', 'filter' => 'strtolower'],

    // normalize "phone" input
    ['phone', 'filter', 'filter' => function ($value) {
        // normalize phone input here
        return $value;
    }], ]

答案 1 :(得分:0)

如果需要,您可以创建自定义验证。

public function rules()
{
    return [
        // an inline validator defined as the model method validateEmail()
        ['email', 'validateEmail'],
    ];
}

public function validateEmail($attribute, $params)
{
    if (strcasecmp($this->attribute, $this->confirm_email) == 0) {
         $this->addError($attribute, 'Username should only contain alphabets');
    }
}

它会将电子邮件与二进制安全不区分大小写进行比较。