PHP-过滤电子邮件地址

PHP-过滤电子邮件地址,php,validation,email,Php,Validation,Email,我有一个注册脚本,我希望只有具有特定电子邮件的用户才能注册。(例如:所有电子邮件必须以“@test.com”结尾) 这是我的代码: if(isset($\u POST['username']、$\u POST['email']、$\u POST['p'])){ $username=filter\u input(input\u POST,'username',filter\u SANITIZE\u字符串); $email=filter\u input(输入\u POST,'email',过滤\u

我有一个注册脚本,我希望只有具有特定电子邮件的用户才能注册。(例如:所有电子邮件必须以“@test.com”结尾)

这是我的代码:

if(isset($\u POST['username']、$\u POST['email']、$\u POST['p'])){
$username=filter\u input(input\u POST,'username',filter\u SANITIZE\u字符串);
$email=filter\u input(输入\u POST,'email',过滤\u清理\u email);
$email=filter\u var($email,filter\u VALIDATE\u email);
如果(!filter_var($email,filter_VALIDATE_email)){
$error_msg.='

无效的电子邮件地址!

'; }
试试这个

    <?php

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

    if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
          echo 'Invalid Email';
          die;
    }
    $allowedEmail = array(
                        'gmail.com',
                        'yahoo.com',
                        'stack.com',
                    ); // ALLOWED EMAIL DOMAINS SHOULD BE ADDED INTO THIS ARRAY.

    $emailArr = explode('@', $email);

    if(in_array($emailArr[1], $allowedEmail)) {
        echo 'allowed Email';
    } else {
        echo 'Not allowed Email';
    } 

?>

尝试此操作-将检查电子邮件中的字符是否正确,以及是否包含格式正确的电子邮件地址:

$error = 0;
if($_POST['email']){
    if (!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.
             '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $_POST['email'])){
                // your mail is incorrect.
                $error++;
    }
}

if($error == 0)
{
   // you have no errors, manipulate entered data
}

您可以为此使用正则表达式

 $email = 'myname@sample.com';
 $regex = '/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@test\-test\.com$/';

 if(preg_match($regex, $email))
 {
    echo 'Valid';
 }
 else
 {
    echo 'Invalid';
  }

您可以使用以下代码:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    //valid
}
PHP版本:5>=5.2.0


我认为您应该首先使用
过滤器var
确保电子邮件是有效的,然后查看它是否有正确的域,例如通过
preg\u match

function tellMeIfThisIsValid($email) {
    $allowedDomain = '@test-test.com';

    $isValid = FALSE;
    if (filter_var($email, FILTER_VALIDATE_EMAIL) !== false) {
        if (preg_match('/' . preg_quote($allowedDomain) . '$/', $email)) {
            $isValid = TRUE;
        }
    }
    printf("%-25s => %s" . PHP_EOL, $email, $isValid ? 'valid' : 'not valid');
}

tellMeIfThisIsValid('test@test-test.com');
tellMeIfThisIsValid('test.test@test-test.com');
tellMeIfThisIsValid('@test-test.com');
tellMeIfThisIsValid('test@test-test.com.se');
tellMeIfThisIsValid('test@anothertest-test.com');
tellMeIfThisIsValid('test@testtest.com');
输出:

test@test-test.com        => valid
test.test@test-test.com   => valid
@test-test.com            => not valid
test@test-test.com.se     => not valid
test@anothertest-test.com => not valid
test@testtest.com         => not valid

非常感谢您的回答!这对我很有用:

$check=“/^[_a-z0-9-.]*@test test.comt$/i”;
$email=$_POST['email'];
如果(!preg_匹配($check,$email))
{
$error_msg.=“无效的电子邮件地址!”;

}
试试我更新的代码,这将允许你设置允许的电子邮件地址,根据“从PHP 5.3.0开始,此功能已被弃用。非常不鼓励依赖此功能。”除@Arun所说的之外,这并不能回答问题(看起来像是从很久以前流传下来的复制代码;)Arun,我正在使用5.3.8,它运行得很好。安全性因服务器配置而异,不仅仅是在PHP上。如果您正确设置服务器,它将是安全的。此解决方案存在一些问题。首先,
$check
正则表达式以
comt
结尾,而它应该是
com
,但我想这只是一个输入错误。其次,
$check
中的点将匹配任何字符,因此它确实会匹配
test@test-test.com
但也
test@test-testXcom
。有关使用来处理此问题的示例,请参阅我的答案。