【问题标题】:Laravel: Check for email service provider domain and it subdomainLaravel:检查电子邮件服务提供商域及其子域
【发布时间】:2018-03-09 19:12:04
【问题描述】:

我想限制用户不要添加一些流行的电子邮件服务提供商域,如 gmail.com、yahoo.com、ymail.com、hotmail.com

为此我创建了一个数组

$invalidDomain = ['gmail.com', 'yahoo.com', 'ymail.com', 'hotmail.com']

然后用 in_array 检查用户输入

if(in_array($insertDomain, $invalidDomain)){
 //restrict
}

但现在我也想检查 gmail.co.in、hotmail.co.uk

我该怎么办?

【问题讨论】:

  • 我认为你应该使用这个['gmail', 'yahoo', 'ymail', 'hotmail']
  • 好的,那么我需要检查 substr 对吗?
  • 使用PHP Split函数拆分$insertdomain,然后在if条件下使用
  • 我想你明白我的意思......
  • 是的。伟大的。谢谢

标签: php laravel


【解决方案1】:

您可以使用正则表达式来实现这一点 - 它会给您更大的灵活性,例如:如果您想排除 gmail.co.uk 但允许 gmail.com。见下面的代码sn-p:

$insertDomain = "gmail.com";
$invalidDomain = ['gmail\.[a-zA-Z\.]{2,}', 'yahoo\.[a-zA-Z\.]{2,}', 'ymail\.[a-zA-Z\.]{2,}', 'hotmail\.[a-zA-Z\.]{2,}'];

// join regexp
if (preg_match('/^'.implode("$|^", $invalidDomain).'$/', $insertDomain)) {
    // restrict
    echo $insertDomain."\n";
}

【讨论】:

  • 想要同时排除 gmail.com 和 gmai.co.uk
  • 还有其他解决方案吗?
  • 我认为代码可以满足您的需求。您还需要哪些解决方案?
  • 我想排除 gmail.com 和 gmail.co.uk。您的解决方案可以让 gmail.com 走得更远
【解决方案2】:

使用了这种类型的代码

$invalidDomain = ['gmail', 'yahoo', 'ymail', 'hotmail']

终于在条件下

//$insertDomain = "gmail";

    if(in_array($insertDomain, $invalidDomain)){
     //restrict
    }

【讨论】:

    【解决方案3】:

    您可以使用 PHP 的 parse_url 来确定正在使用的域 http://php.net/manual/en/function.parse-url.php

    输出数组将包含host 索引,该索引将为您提供在作为参数传递给该函数的字符串中使用的域/子域。即

    $partials = parse_url('https://google.com/?id=123');
    
    $insertDomain = $partials['host']; // google.com
    

    【讨论】:

    • 解析 url 返回这个 :- array:2 [ "path" => "'google.com" "query" => "id=123'" ]
    • 你到底传递给它的参数是什么?
    • 不一样-我的示例中有协议https://,它返回array(4) { ["scheme"]=> string(5) "https" ["host"]=> string(10) "google.com" ["path"]=> string(1) "/" ["query"]=> string(6) "id=123" }
    猜你喜欢
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2017-06-23
    • 1970-01-01
    • 2022-06-16
    • 2012-05-03
    相关资源
    最近更新 更多