嘿伙计们,我知道电子邮件验证是其中一个不是块上最有趣的东西。我正在建立一个网站,我想限制我的观众只限于我大学的人,我也希望为我的用户提供首选的电子邮件地址。所以这是一个两部分问题。
是否有真正可靠的PHP功能进行电子邮件验证?
我可以验证来自特定域的电子邮件吗?我不想只检查域名是否存在,因为我知道www.mycollege.edu已经存在。真的无论如何都要验证用户是否拥有有效的@ mycollege.edu网址?谢谢!
答案 0 :(得分:24)
这就是我使用的:
function check_email_address($email) {
// First, we check that there's one @ symbol, and that the lengths are right
if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) {
// Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
return false;
}
// Split it into sections to make life easier
$email_array = explode("@", $email);
$local_array = explode(".", $email_array[0]);
for ($i = 0; $i < sizeof($local_array); $i++) {
if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) {
return false;
}
}
if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
$domain_array = explode(".", $email_array[1]);
if (sizeof($domain_array) < 2) {
return false; // Not enough parts to domain
}
for ($i = 0; $i < sizeof($domain_array); $i++) {
if (!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) {
return false;
}
}
}
return true;
}
编辑使用preg_match替换折旧的ereg,以符合PHP 5.3的要求
答案 1 :(得分:2)
如果您确实要确保其有效,请将您的注册表格发送给他们一封带有URL链接的电子邮件,他们必须点击进行验证。
这样您不仅知道地址有效(因为收到了电子邮件),而且您还知道该帐户的所有者已注册(除非其他人知道他的登录详细信息)。
为了确保它正确结束,您可以在'@'上使用explode()并检查第二部分。
$arr = explode('@', $email_address);
if ($arr[1] == 'mycollege.edu')
{
// Then it's from your college
}
PHP还有自己使用filter_var验证电子邮件地址的方法:http://www.w3schools.com/php/filter_validate_email.asp
答案 2 :(得分:0)
这应该有效:
if (preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])@mycollege.edu$/', $email)) {
// Valid
}
答案 3 :(得分:0)
请阅读此处 http://ru2.php.net/manual/en/book.filter.php
或简而言之
var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
答案 4 :(得分:0)
([a-zA-Z0-9_-]+)(\@)([a-zA-Z0-9_-]+)(\.)([a-zA-Z0-9]{2,4})(\.[a-zA-Z0-9]{2,4})?
for php preg_match function
/([a-zA-Z0-9_-]+)(\@)([a-zA-Z0-9_-]+)(\.)([a-zA-Z0-9]{2,4})(\.[a-zA-Z0-9]{2,4})?/i
^([a-zA-Z0-9_-]+)(@mycollege.edu)$
for php preg_match function
/^([a-zA-Z0-9_-]+)(@mycollege.edu)$/i
<?php
$email = 'tahir_aS-adov@mycollege.edu';
preg_match('/^([a-zA-Z0-9_-]+)(@mycollege.edu)$/i', $email, $matches);
if ($matches) {
echo "Matched";
} else {
echo "Not Matched";
}
var_dump($matches);
答案 5 :(得分:0)
这可能是一个更好的解决方案。许多人已经回答了,尽管它有点不同。
$email = "info@stakoverflow.com";
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo $email ." is a valid email address";
} else {
echo $email ." is not a valid email address";
}
我希望这个使用起来很简单。
答案 6 :(得分:0)
在php中使用filter_var的简单函数
<?php
function email_validation($email) {
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo("$email is a valid email address");
} else {
echo("$email is not a valid email address");
}
}
//Test
email_validation('johnson123');
?>