Laravel:检查电子邮件服务提供商域及其子域

时间:2017-09-28 06:32:24

标签: php laravel

我希望限制用户不要添加一些流行的电子邮件服务提供商域名,如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

我该怎么办?

3 个答案:

答案 0 :(得分:2)

你可以使用正则表达式实现这一点 - 它会给你更多的灵活性,例如:如果你想排除gmail.co.uk但允许gmail.com。请参阅下面的代码段:

$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";
}

答案 1 :(得分:1)

使用此类代码

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

最后处于条件

//$insertDomain = "gmail";

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

答案 2 :(得分:0)

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

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

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

$insertDomain = $partials['host']; // google.com