【发布时间】:2011-11-02 21:35:04
【问题描述】:
我想验证电子邮件地址以确保它们是大学教育地址。最好的方法是什么?我在数据库中有一个大学列表,我为每个大学指定一个 URL,该 URL 应该是该大学用户电子邮件地址的一部分。所以对于哈佛,网址是“harvard.edu”,因为所有哈佛电子邮件地址都将其作为其主机名的一部分。
有没有人可以让我这样做的 PHP 函数?
【问题讨论】:
标签: php validation email
我想验证电子邮件地址以确保它们是大学教育地址。最好的方法是什么?我在数据库中有一个大学列表,我为每个大学指定一个 URL,该 URL 应该是该大学用户电子邮件地址的一部分。所以对于哈佛,网址是“harvard.edu”,因为所有哈佛电子邮件地址都将其作为其主机名的一部分。
有没有人可以让我这样做的 PHP 函数?
【问题讨论】:
标签: php validation email
我会先检查电子邮件是否是有效的电子邮件
if(filter_var($email, FILTER_VALIDATE_EMAIL))
如果是我会提取域名
$mailDomain = substr(strrchr($email, "@"), 1);
一旦它被提取出来,我会检查它是否存在于我的基地中
mysql_query("SELECT count(domain_name) from domain where domain_name = ".mysql_real_escape_string($mailDomain));
【讨论】:
注意:这只会检查 *.edu 电子邮件地址
您可以将其简化为仅检查 edu 电子邮件:
$email = "myemail@uni.edu";
function isEduEmail($email){
$email = explode(".",$email);
if($email[count($email)-1] == "edu")
return true;
else
return false;
}
var_dump(isEduEmail($email)); // echo bool(true)
我意识到对于其他人来说,使用正则表达式会有更好的解决方案,但我对此很垃圾,所以这个 a 解决方案。
【讨论】:
edu.sg 结尾怎么办?
sg 只是一个例子,cn, my, jp, tw ...您需要考虑国家顶级域名
检查字符串是否以.edu结尾
<?php
$email = "myemail@uni.edu";
function isEduEmail($email){
$eLength = strlen($email) - 1;
$local = substr($email, $eLength - 3, $eLength );
if($local === '.edu') return true;
return false;
}
var_dump(isEduEmail($email)); // echo bool(true)
?>
【讨论】:
.edu 电子邮件地址...而不是uni.edu.sg(顺便说一句,我从未听说过)
由于您在 mysql 中有数据,因此这样的示例查询应该可以工作
$some_email = ... ; // don't forget to sanitize
$sql = <<<SQL
select count(*) from tables
where domain_name = substring_index('{$some_email}', '@', -1);
SQL;
... // processing
// return >=1 is a valid edu email
【讨论】:
如果您有域列表,只需检查给定的电子邮件地址是否以“@whitelisted.domain”结尾。您可以使用filter_var() 来验证它是否是一个正确的电子邮件地址,然后使用strpos() 来检查它是否包含正确的域。
例子:
$domains = array('test.org', 'fake.com');
$email = 'test@fake.com';
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
$email_ok = false;
foreach ($domains as $d) {
if (strpos($email, '@' . $d) !== false) {
$email_ok = true;
break;
}
}
// $email_ok is true if email's domain is on our whitelist
var_dump($email, $email_ok);
如果您想通过查询MySQL服务器进行验证,请提取@之后的电子邮件部分并检查它是否在您的列表中。
【讨论】:
.edu 电子邮件地址
类似的东西(希望你明白)
我不确定这是否是有效的代码,因为没有测试就写了:
<?php
$usersEmail1 = "i.am@harvard.edu";
$email1Exploded = explode("@", $usersEmail1);
if (sizeof($email1Exploded) == 2) {
$domain1 = trim($email1Exploded[1]);
$result = mysql_query("SELECT * from valid_domains WHERE url LIKE '%" . mysql_real_escape_string($domain1) . "' LIMIT 1");
if (!empty(mysql_num_rows($result))) {
//Valid email
} else {
//Invalid email
}
} else {
//not valid email
}
?>
【讨论】:
单行:
function isEduEmail($sEmail) {
return (substr($sEmail, strrpos($sEmail, ".")+1) == "edu");
}
【讨论】:
.?喜欢my.name@something.edu
$email="bob@harvard.edu";
$lthree=substr($email,-3);
$edu=false;
if ($lthree=="edu") $edu=true;
现在如果 $edu 为真,那么电子邮件就是 edu 电子邮件。
【讨论】: