我正在使用以下功能从文本中提取电子邮件地址。
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
请告知。
答案 0 :(得分:2)
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;
}
答案 1 :(得分:1)
您应该转义破折号字符,因为它在使用的上下文中具有特殊含义(范围):
[_a-z0-9\-]
答案 2 :(得分:1)
电子邮件验证regexp存在 myriads 问题。例如,它不会通过任何完全有效的现代国家顶级域名,它诚实地认为顶级域名中最多有4个字母。它不允许在用户帐户部分中使用任意数量的点.
,它不允许使用加号+
等。
通常,验证电子邮件的良好做法归结为:
@
及其全部内容。有关详细信息,请查看http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/或任何类似文章。