电子邮件地址特殊字符混淆

1

我正在玩弄filter_var验证电子邮件:

$email = "test@test.com"; 

if( filter_var( $email, FILTER_VALIDATE_EMAIL ) ){

    echo "{Valid Email";

}else{

    echo "Invalid Email";

}
Run Code Online (Sandbox Code Playgroud)

那回来了Valid Email.

但是当我尝试像. $ # * ? & ! ^ ~ / ' - _ @ % {} | = +本地部分那样的特殊字符时,喜欢:

$email = "te?st@test.com";
$email = "te/st@test.com";
$email = "te'st@test.com";
$email = "te}st@test.com";
$email = "te|st@test.com";
$email = "te=st@test.com";
Run Code Online (Sandbox Code Playgroud)

那也会回来Valid Email.

它不接受像这样的人物<> [] ,.

但如果我使用$:

$email = "te$st@test.com";
Run Code Online (Sandbox Code Playgroud)

那会回来Valid Email,但也是NOTICE Undefined variable: st

我应该使用它来验证电子邮件地址,在将它们插入数据库之前?

或者我应该使用自定义正则表达式?

Joh*_*nde 5

使用双引号字符串时,该$字符被视为变量名称的开头.所以$st看起来像一个变量,PHP试图插入它.通过使用不在字符串中插入变量的单引号可以很容易地解决这个问题.

$email = 'te$st@test.com';
Run Code Online (Sandbox Code Playgroud)

有关字符串的详细信息,请参阅PHP文档,因为它是PHP开发的重要部分.