2017-09-28 26 views
0

我想限制用戶不添加像gmail.com,yahoo.com,ymail.com,hotmail.comLaravel:檢查電子郵件服務提供商域和子域它

對於一些常用的電子郵件服務提供商域我已經創建了一個數組

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

,然後選中與in_array

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

用戶輸入,但現在我也想檢查gmail.co.in,hotmail.co.uk

我該怎麼辦?

+1

我認爲你應該使用這個'[ '的Gmail',「雅虎','ymail','hotmail']' –

+0

好的,那麼我需要檢查substr的權利? –

+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"; 
} 
+0

想要排除gmail.com和gmai.co.uk兩個 –

+0

任何進一步的解決方案? –

+0

我認爲代碼可以滿足您的需求。你需要什麼進一步的解決方案? – Lukas

0

你可以使用PHP的parse_url以確定正在使用http://php.net/manual/en/function.parse-url.php

輸出數組什麼域將包含host指數,會給你你作爲參數傳遞給函數的字符串中使用的域/子域名.IE

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

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

解析url返回此: - array:2 [ 「path」=>「'https://google.com/」 「query」=>「id = 123'」 ] –

+0

你究竟傳遞了什麼作爲論點? –

+0

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

1

使用這種類型的代碼

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

終於在條件

//$insertDomain = "gmail"; 

    if(in_array($insertDomain, $invalidDomain)){ 
    //restrict 
    } 
相關問題