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个字母。它不允许用户帐户部分中任意数量的点,也不允许加号等
通常,验证电子邮件的良好做法归结为:
@
即可@
即可有关更多详细信息,请参阅或任何类似文章。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
打字错误吗?当破折号在字符类的开头或结尾时,不需要转义破折号。当破折号在字符类的开头或结尾时,不需要转义破折号。当破折号在字符类的开头或结尾时,不需要转义破折号类。当破折号在字符类的开头或结尾时,不需要逃逸破折号。