【问题标题】:filter email in php using preg使用 preg 在 php 中过滤电子邮件
【发布时间】:2014-03-13 13:29:46
【问题描述】:

php 中除了FILTER_VALIDATE_EMAIL 之外还有其他邮件过滤器吗?我希望 .@ 在用户电子邮件中是强制性的。

是否有任何内置过滤器可以帮助我完成这项任务?

【问题讨论】:

标签: php regex validation preg-replace


【解决方案1】:

FILTER_VALIDATE_EMAIL 做到了。

没有.

<?php 

$email = "user@emailcom";
if(filter_var($email, FILTER_VALIDATE_EMAIL)){ 
    var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); 
}else{ 
    var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));    
} 

// returns false

没有@

<?php 

$email = "useremail.com";
if(filter_var($email, FILTER_VALIDATE_EMAIL)){ 
    var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); 
}else{ 
    var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));    
} 

// returns false too

使用正确的邮件:

<?php 

$email = "user@email.com";
if(filter_var($email, FILTER_VALIDATE_EMAIL)){ 
    var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); 
}else{ 
    var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));    
} 

// returns user@email.com

【讨论】:

    【解决方案2】:

    你想要,那封电子邮件在他的名字中包含点 (.) 吗?喜欢 my.email@gmail.com?也许这会有所帮助...

    这返回 true(名称中带有点):

    preg_match('/^[A-Z0-9._%+-]+\.[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i', 'my.email@gmail.com')
    

    这返回 false(名称中没有点):

    preg_match('/^[A-Z0-9._%+-]+\.[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i', 'myemail@gmail.com')
    

    【讨论】:

    • 这个正则表达式肯定是不对的,因为它需要在地址的用户名部分使用.
    • 如果点必须在用户名或域中,他没有写
    • 在前半部分需要一个点意味着 99.5% 的可能有效电子邮件地址无法识别。
    【解决方案3】:

    FILTER_VALIDATE_EMAIL 不允许验证不完整的电子邮件地址。如果你使用 PHP >5.2,那么这个是安全的。

    【讨论】:

      猜你喜欢
      • 2015-06-14
      • 1970-01-01
      • 2019-07-05
      • 2014-12-25
      • 2020-09-14
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多