Php preg_match找不到;破折号;在电子邮件中

Php preg_match找不到;破折号;在电子邮件中,php,preg-match,Php,Preg Match,我正在使用以下功能从文本中提取电子邮件地址 function is_valid_email($email) { if (preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.([a-z]){2,4})$/',$emailss)) return true; else return false; } 它工作非常顺利,但存在以下问题: 带有“破折号”的电子邮件不起作用: 例如: info-test@

我正在使用以下功能从文本中提取电子邮件地址

function is_valid_email($email) {
    if (preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.([a-z]){2,4})$/',$emailss)) return true;
    else return false;
}
它工作非常顺利,但存在以下问题: 带有“破折号”的电子邮件不起作用:

例如:

info-test@web-site.com
出炉:
test@web


请告知。

您应该转义破折号字符,因为它在所用上下文中具有特殊含义(范围):


[\u a-z0-9\-]

您应该转义破折号字符,因为它在所用上下文中具有特殊含义(范围):

[\u a-z0-9\-]

该电子邮件验证regexp存在大量问题。例如,它不会通过任何完全有效的现代国家TLD,它诚实地认为TLD中最多有4个字母。它不允许用户帐户部分中任意数量的点,也不允许加号等

通常,验证电子邮件的良好做法归结为:

  • 最小验证-只需检查是否存在
    @
    即可
  • 只需发送那封电子邮件,不要检查其他任何东西。如果它将被发送,那么它确实是一封有效的电子邮件
  • 有关更多详细信息,请参阅或任何类似文章。

    该电子邮件验证regexp存在大量问题。例如,它不会通过任何完全有效的现代国家TLD,它诚实地认为TLD中最多有4个字母。它不允许用户帐户部分中任意数量的点,也不允许加号等

    通常,验证电子邮件的良好做法归结为:

  • 最小验证-只需检查是否存在
    @
    即可
  • 只需发送那封电子邮件,不要检查其他任何东西。如果它将被发送,那么它确实是一封有效的电子邮件

  • 有关更多详细信息,请参阅或任何类似文章。

    Dash在正则表达式中具有特殊意义。因此不能直接使用,需要使用反斜杠进行转义。更新代码如下:

    function is_valid_email($email) {
        if (preg_match('/^[_a-z0-9\-]+(\.[_a-z0-9\-]+)*@[a-z0-9\-]+(\.[a-z0-9\-]+)*(\.([a-z]){2,4})$/',$emailss)) return true;
        else return false;
    }
    

    破折号在正则表达式中有特殊的意义。因此不能直接使用,需要使用反斜杠进行转义。更新代码如下:

    function is_valid_email($email) {
        if (preg_match('/^[_a-z0-9\-]+(\.[_a-z0-9\-]+)*@[a-z0-9\-]+(\.[a-z0-9\-]+)*(\.([a-z]){2,4})$/',$emailss)) return true;
        else return false;
    }
    

    是否有任何理由不使用内置的
    过滤器\u验证\u电子邮件
    ?@Lix此功能不是傻瓜式的,imo。文档中的注释也表明。提供了一个符合规范的库,并验证了大量可能的电子邮件地址。它对我来说工作得很好。
    $email
    $emailss
    是否有打字错误?您是否有任何理由不使用内置的
    过滤器\u VALIDATE\u email
    ?@Lix此功能不是傻瓜式的,依我看。文档中的评论也表明。提供了一个符合规范的库,并验证了大量可能的电子邮件地址。它对我来说工作得很好。是
    $email
    $emailss
    打字错误吗?当破折号在字符类的开头或结尾时,不需要转义破折号。当破折号在字符类的开头或结尾时,不需要转义破折号。当破折号在字符类的开头或结尾时,不需要转义破折号类。当破折号在字符类的开头或结尾时,不需要逃逸破折号。