我在PHP中创建一个表单,其中包含一个名为email的字段,用户需要输入他/她的电子邮件ID。为了确保输入的邮件ID在语法方面是可靠的(例如username_123@domain.com
有效),我需要对其进行某种验证。我发现情况非常模糊,因为我不明白如何检查输入的邮件ID是否包含@
符号等。请帮助。谢谢。 :)
答案 0 :(得分:8)
最佳解决方案就是:
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
...
}
让PHP为您处理繁重的工作。否则,如果你想要严格正确并且自己直接使用正则表达式,你将会遇到这种怪异:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
严格遵守RFC2822。
答案 1 :(得分:2)
首先,您需要定义有效的电子邮件。
根据对此验证的重要程度,有不同的方法。
有些人使用crazy by-the-RFC regexps.
另一个极端是保存用户输入的内容,然后尝试向该地址发送确认电子邮件。没有确认=糟糕的电子邮件。
你可能想要介于两者之间:确保中间有一个@
,例如:
$email_arr = explode('@', $email);
if (sizeof($email_arr) !== 2 || $email_arr[0] == '' || $email_arr[1] == '')
... // definitely not valid
UPD: Marc B使用filter_var($email, FILTER_VALIDATE_EMAIL)
对其进行了修改
这可能是最好的方式。
答案 2 :(得分:1)
您可以使用正则表达式验证格式:
<?php
$email = "someone@example.com"; // or perhaps $_POST['email'];
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
echo "Valid email address.";
}
else {
echo "Invalid email address.";
}
?>
答案 3 :(得分:0)
您可以使用jquery插件验证表单。
答案 4 :(得分:0)
从我自己的代码:
if( !preg_match( "(^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$)i", $email))
echo "E-mail address invalid";
极少数合法地址可能会失败,例如任何@example.info
,以及使用不常用字符的任何电子邮件地址,但大多数情况下这都可以正常使用。