デフォルトのLaravel検証クラスでは、奇妙な電子メールが許可されます。 aaaa?#%&'@şğüçi̇ö.com
は、それが検証に合格:Laravel電子メール検証の問題
return Validation::make($data, [
'email' => 'required|string|email|max:100|unique:customers,email'
]);
私はいくつかの奇妙な電子メールなどを使用しようとしたとき:ここで私は定義された検証ルールです。しかし、電子メールの非ラテン文字はDB挿入の前に変換されます。したがって、データベースの電子メールアドレスは元のものと一致しません。
これを防ぐために、@記号の後に非ラテン文字を使用しないようにします。
public function passes($attribute, $value)
{
return filter_var($value, FILTER_VALIDATE_EMAIL)
&& preg_match('/@.+\./', $value);
}
カスタムルールを試しましたが、動作していません。これについていくつかの助けを受けることは良いことです。
編集1 ありがとうございました!しかし、明らかにカスタムバリデーターがアクションを取らない理由は、Laravelが操作の前にすべての入力データを消毒するということです。そのため、非ラテン文字を変換した後では、入力に非ラテン文字がないため、preg_replace()は常に1を返します。まず第一に私はこれに対する解決策を見つけ出し、Laravelが入力を害さないようにする必要があります。あなたの質問から
パスメソッドの 'return filter_var($ value、FILTER_VALIDATE_EMAIL);はどうでしょうか? – Maraboc