我使用Yii2提供的简单比较验证规则,如下所示:
[confirm_email', 'compare', 'compareAttribute'=>'email', 'message'=>"Emails don't match"],
问题在于此规则比较两封100%的电子邮件,包括Case Sensitive,意味着 email@test.com , email@Test.com 会生成验证错误。
有没有办法从此规则中删除此区分大小写的比较?
答案 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');
}
}
它会将电子邮件与二进制安全不区分大小写进行比较。