【问题标题】:Yii2 compare email without case sensitiveYii2 比较不区分大小写的电子邮件
【发布时间】:2016-11-25 00:09:19
【问题描述】:

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

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

问题在于此规则会 100% 比较两封电子邮件,包括区分大小写,这意味着 email@test.comemail@Test.com 将产生验证错误。

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

【问题讨论】:

    标签: validation yii2 compare


    【解决方案1】:

    您可以根据需要创建自定义验证。

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

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

    【讨论】:

      【解决方案2】:

      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;
          }], ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 2012-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多