【问题标题】:Laravel validation rule for emailLaravel 邮件验证规则
【发布时间】:2018-07-04 11:28:15
【问题描述】:

我不知道如何为不接受 gmail、yahoo 等免费电子邮件帐户的电子邮件字段制定验证规则。 谁能指导我这个话题。提前致谢

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我讨厌当我尝试使用我的邮件并因为它来自免费帐户而被拒绝时。
  • 不接受 gmail?您往往会失去 70% 的客户。

标签: php laravel


【解决方案1】:

将电子邮件提供商列表放入配置文件中,例如放入config/email.php

'banned_email_providers' => '@gmail\.com|@yahoo\.com'

然后使用此列表使用regex 验证规则:

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

【讨论】:

  • 如果您的电子邮件是 gmail.com@nofreeacount.com 怎么办? :-D
  • @Amarnasan 好吧,创建此电子邮件的人应该被禁止。 ) 你可能会使用像@gmail.com|@yahoo.com 这样的列表。
  • 它显示所有情况下的无效电子邮件格式。例如。 mk@webhopers.in
  • @Er.MukeshSharma 这是来自真实项目的 100% 工作解决方案。请提供更多细节。您是否将webhopers.in 添加到禁止电子邮件列表中?或者您在此字符串中添加了另一个验证规则,例如 email
  • @AlexeyMezenin 我没有在列表中添加 webhopers.in。我正在检查它。
【解决方案2】:

您可以存储邮件站点的名称并根据其值检查电子邮件

$free = [
   'google.com',
   'yahoo.com'
];

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

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

【讨论】:

    【解决方案3】:

    将此条目添加到 \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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 2020-06-25
      • 2020-06-09
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多