PHP:电子邮件验证并接受来自特定域的电子邮件地址

时间:2012-07-28 21:14:32

标签: php

我目前正在使用AJAX / JS来创建没有按钮点击或页面刷新的表单。我的询问是关于电子邮件验证。现在,PHP代码检查电子邮件地址是否有效。我想只接受来自某个域的电子邮件。如何通过php实现只接受来自gmail的电子邮件地址? Example

用于验证电子邮件的PHP:

if($_POST) {
    $email = $_POST['email'];
    if (preg_match('|^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$|i', $email)) {
        echo ('<div id="email_input"><span id="resultval">'.$email.'</span></div>');
    }
    else {
        echo ('<div id="email_input"><span id="resultval">Include a valid email address.</span></div>');
    }
}

3 个答案:

答案 0 :(得分:5)

Php有一个简单的功能,可以帮助您检查电子邮件地址是否有效:

$isValid = filter_var($email, FILTER_VALIDATE_EMAIL);

要检查电子邮件地址是否是gmail地址,以下方法可以解决问题:

list ($user, $domain) = explode('@', $email);
$isGmail = ($domain == 'gmail.com');

答案 1 :(得分:4)

小心你的正则表达式it won't validate all actual email addresses

您有一个内置的PHP函数来检查电子邮件是否有效:

$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

如果返回true,则只需检查字符串是否以@gmail.com结尾。请注意,此功能可能有some strange issues,因为电子邮件验证标准可能令人惊讶。

如果你真的想要一个验证所有电子邮件地址的正则表达式,那么它是:

(?:[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])+)\])

答案 2 :(得分:2)

你应该改变你的正则表达式

'|^[A-Z0-9._%+-]+@gmail\.com$|i'