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

时间:2018-08-15 11:22:09

标签: php email-validation

我正在和filter_var一起来验证电子邮件:

$email = "test@test.com"; 

if( filter_var( $email, FILTER_VALIDATE_EMAIL ) ){

    echo "{Valid Email";

}else{

    echo "Invalid Email";

}

返回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";

那也将返回Valid Email

它不接受像<> [] ,这样的字符。

但是如果我使用$

$email = "te$st@test.com";

这将返回Valid Email,但也会返回NOTICE Undefined variable: st

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

还是我应该使用自定义的正则表达式?

1 个答案:

答案 0 :(得分:5)

使用双引号引起来的字符串时,$字符被视为变量名的开头。因此$st看起来像一个变量,PHP尝试对其进行插值。通过使用不对字符串变量进行内插的单引号可以轻松解决此问题。

$email = 'te$st@test.com';

请参阅PHP documentation for strings,以了解有关此内容的更多信息,因为它是PHP开发的重要组成部分。