Проверка подлинности для конкретного домена

Я пытаюсь закодировать регистрационную форму, где я проверяю электронную почту, используемую для регистрации.

Вкратце, я хочу убедиться, что идентификатор электронной почты, используемый для регистрации, является доменом компании, а не что-то вроде gmail или yahoo.

У меня есть следующий код, чтобы проверить, является ли электронное письмо частью данного домена, как я могу изменить это, чтобы проверить, что он ISNT в определенном списке доменов? (например: gmail.com, yahoo.com, hotmail.com и т. д.).

return (bool) preg_match('/^([a-z0-9\+\_\-\.]+)@([a-z0-9\+\_\-\.]{2,})(\.[az]{2,4})$/i', $domain); 

Я думаю, что это должно быть в этом направлении, но не совсем уверенно:

 function validate($email) { $error = 0; $domains = array('gmail.com','yahoo.com','hotmail.com'); foreach($domains as $key=>$value) { if(preg_match('/^([a-z0-9\+\_\-\.]+)@([a-z0-9\+\_\-\.]{2,})(\.[az]{2,4})$/i', $value) { $error=1; } } if($error==0) return true; else return false; 

EDIT: Я пробовал все ответы, приведенные здесь, форма по-прежнему представляет без проблем, независимо от того, какой домен я использую! (Даже не электронная почта, похоже, работает!)

Вот как я называю функцию –

 if(isset($_POST['clients_register'])) { //Must contain only letters and numbers if(!preg_match('/^[a-zA-Z0-9]$/', $_POST['name'])) { $error[]='The username does not match the requirements'; } //Password validation: must contain at least 1 letter and number. Allows characters !@#$% and be 8-15 characters if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,15}$/', $_POST['password'])) { $error[]='The password does not match the requirements'; } //Email validation if (validateEmail($_POST['email'])==false) { $error[]='Invalid E-mail'; } //Output error in array as each line if ( count($error) > 0) { foreach ($error as $output) { echo "{$output} <br>"; } } else { //Syntax for SQL Insert into table and Redirect user to confirmation page } } 

Проблема в том, что независимо от того, что я делаю, пользователь перенаправляется на страницу подтверждения (даже с именем, состоящим из цифр и электронной почты, например «table».

Вы должны сделать это на отдельном шаге. Сначала проверьте правильность синтаксиса e-mailaddress. Затем извлеките домен и посмотрите, не находится ли он в вашем черном списке.

 function validate($email) { if (!preg_match('/^([a-z0-9\+\_\-\.]+)@([a-z0-9\+\_\-\.]{2,})(\.[az]{2,4})$/i', $email)) return false; $domains = array('gmail.com','yahoo.com','hotmail.com'); list(, $email_domain) = explode('@', $email, 2); return !in_array($email_domain, $domains); } 

PHP

 // Suposing that $email is a valid email function validate($email) { $invalidDomains = array('gmail.com','yahoo.com','hotmail.com'); $parts = explode('@',$email); $domain = $parts[1]; if(!in_array($domain,$invalidDomains)) return true; return false; } 

Дайте мне знать, если это полезно.

 function validateEmail($email) { // Etc, just an array of the blacklisted domains $blacklistDomains = ['gmail.com', 'yahoo.com', 'hotmail.com', 'googlemail.com']; // Check if the email is valid if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { return false; } // Split the email after the '@' to get the domain $emailParts = explode('@', $email); if (in_array(end($emailParts), $blacklistDomains)) { return false; } return true; } 

Вам понадобится довольно большой список доменов.