【发布时间】:2013-12-13 20:14:33
【问题描述】:
我正在尝试编写一个注册表单,以验证用于注册的电子邮件。
简而言之,我想确保用于注册的电子邮件 ID 是公司域,而不是像 gmail 或 yahoo 这样的域名。
我有以下代码来检查电子邮件是否是给定域的一部分,我如何修改它以检查它是否在给定的域列表中? (例如: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
}
}
问题是,无论我做什么,用户都会被重定向到确认页面(即使是由数字组成的名称和像“table”这样的电子邮件。
【问题讨论】:
-
$email_parts = split('@',$email); if (in_array($email_parts[1],$domains) ............ -
添加“googlemail.com”,它的另一个gmail域名...
-
这些大邮件服务有什么问题?使用不在您列表中的域并不能保证它属于一家公司。公司也可能在其域下使用 Google 邮件。我想知道你想通过将这些列入黑名单获得什么效果。
-
专门用来隔离没有自己域名的小型企业。解释起来很复杂,但无论如何我都感谢您的帮助!
标签: php validation