使用PHP验证表单中的电子邮件输入

时间:2011-09-22 18:46:08

标签: php mysql html forms

我在PHP中创建一个表单,其中包含一个名为email的字段,用户需要输入他/她的电子邮件ID。为了确保输入的邮件ID在语法方面是可靠的(例如username_123@domain.com有效),我需要对其进行某种验证。我发现情况非常模糊,因为我不明白如何检查输入的邮件ID是否包含@符号等。请帮助。谢谢。 :)

5 个答案:

答案 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."; 
}  

?> 

http://php.net/manual/en/function.eregi.php

答案 3 :(得分:0)

您可以使用jquery插件验证表单。

http://docs.jquery.com/Plugins/Validation

答案 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,以及使用不常用字符的任何电子邮件地址,但大多数情况下这都可以正常使用。