我正在尝试编写注册表单,我正在验证用于注册的电子邮件。
简而言之,我想确保用于注册的电子邮件ID是公司域名,而不是像gmail或yahoo那样。
我有以下代码来检查如果电子邮件是给定域的一部分,我如何修改它以检查它在给定域名列表中的ISNT? (例如:gmail.com,yahoo.com,hotmail.com等)。
return (bool) preg_match('/^([a-z0-9\+\_\-\.]+)@([a-z0-9\+\_\-\.]{2,})(\.[a-z]{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,})(\.[a-z]{2,4})$/i', $value)
{
$error=1;
}
}
if($error==0)
return true;
else
return false;
编辑:我尝试了这里给出的所有答案,无论我使用哪个域,表单仍然没有问题提交! (即使是非电子邮件似乎也有效!)
这就是我调用函数的方法 -
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
}
}
问题是,无论我做什么,用户都会被重定向到确认页面(即使名字由数字和“桌子”之类的电子邮件组成。
答案 0 :(得分:2)
您应该在单独的步骤中执行此操作。首先检查电子邮件地址是否具有有效语法。然后提取域名并查看它是否在您的黑名单中。
function validate($email)
{
if (!preg_match('/^([a-z0-9\+\_\-\.]+)@([a-z0-9\+\_\-\.]{2,})(\.[a-z]{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);
}
答案 1 :(得分:0)
<强> 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;
}
让我知道它是否有用。
答案 2 :(得分:0)
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;
}
你需要一个非常大的域名列表。