Yii2 сравнивает электронную почту без учета регистра

Я использую простое правило проверки сравнения, предлагаемое Yii2, следующим образом:

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

Проблема в том, что это правило сравнивает два электронных письма на 100 %, включая регистр с учетом регистра, что означает, что [email protected] и [email protected] вызовут ошибку проверки.

Есть ли способ удалить это сравнение с учетом регистра из этого правила?


person AXheladini    schedule 21.07.2016    source источник


Ответы (2)


strcasecmp не обрабатывает многобайтовые символы, прочитайте это

предлагается использовать strtolower()

вас также может заинтересовать фильтр ввода yii, чтобы преобразовать ввод в нижний регистр, например:

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

    // normalize "phone" input
    ['phone', 'filter', 'filter' => function ($value) {
        // normalize phone input here
        return $value;
    }], ]
person e-frank    schedule 21.07.2016

Вы можете создать пользовательскую проверку, если хотите.

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');
    }
}

Он будет сравнивать электронные письма с двоичным кодом без учета регистра.

person Mohan Rex    schedule 21.07.2016