Laravel 邮箱验证规则

7

我不知道如何制定验证规则,以使电子邮件字段不接受像Gmail、Yahoo等免费账户的电子邮件。有人可以在这个问题上给我指导吗?提前致谢。


2
你目前尝试了什么? - Ayaz Ali Shah
我讨厌当我尝试使用我的邮件时,因为它来自免费账户而被拒绝。 - Amarnasan
不接受Gmail吗?你可能会失去70%的客户。 - Tpojka
3个回答

5
将电子邮件提供商列表放入配置文件中,例如放在 config/email.php 文件中:
'banned_email_providers' => '@gmail\.com|@yahoo\.com'

然后使用regex验证规则,使用以下列表:

'email' => ['regex:/^((?!' . config('email.banned_email_providers') . ').)*$/'],

如果你的电子邮件是gmail.com@nofreeacount.com呢?:-D - Amarnasan
它显示所有情况下的无效电子邮件格式。例如,mk@webhopers.in - Er. Mukesh Sharma
@Er.MukeshSharma 这是来自真实项目的100%工作解决方案。请提供更多细节。您是否将“webhopers.in”添加到禁止邮件列表中?或者您已经添加了另一个验证规则,例如“email”到此字符串中? - Alexey Mezenin
@Er.MukeshSharma 请展示您现在正在使用的完整代码。 - Alexey Mezenin
@AlexeyMezenin,它工作正常。请通过添加方括号编辑此行代码。'email' => ['regex:/^((?!' . config('email.banned_email_providers') . ').)*$/'] - Er. Mukesh Sharma
显示剩余3条评论

1
你可以存储邮件站点的名称,并通过其值检查电子邮件。
$free = [
   'google.com',
   'yahoo.com'
];

$mailSite = substr($email, strpos($email, '@') + 1);

if (in_array($mailSite, $free) {
    exit('free email');
}

1
将此条目添加到 \config\mail.php 文件中。
'banned_servers' => ['yahoo.com', 'gmail.com']

那么

    $rules = [
        'email' => array('regex:/@(?!' . implode('|', array_map(function ($item){return str_replace('.', '\.', $item);}, config('mail.banned_servers'))) . ')/')
    ];

    $messages = ['email.regex' => 'Email accounts from '. implode(', ', config('mail.banned_servers')) . ' are not allowed'];

    $this->validate(Request::instance(), $rules, $messages);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接