【问题标题】:Regexp valid email check正则表达式有效的电子邮件检查
【发布时间】:2017-10-05 20:33:17
【问题描述】:

我尝试使用以下正则表达式代码检查电子邮件是否有效。

/[0-9A-Za-z-_.]{1,64}[\@][0-9a-zA-Z\-]{1,63}[\.][a-zA-Z\-]{2,24}/

但在测试中,我发现test---@gmail.comtest-.-@gmail.comtest-.@gmail.comtest.@gmail.comtest__@gmail.com__--.test@gmail.com 等无效电子邮件被标记为有效。

我认为没有有效的电子邮件是 . , _ , - 在开头或结尾,而不是在彼此之后,如 -- 或 __ 或 -。或.- ...

我能做些什么让它变得更好?

【问题讨论】:

  • “我能做些什么让它变得更好?” --- 您无法使用正则表达式验证电子邮件。
  • 您的大多数示例都是有效的电子邮件。
  • @AlexHowansky 你是怎么得出这个观点的?您是否曾尝试通过例如 outlook.com 或 gmail.com 注册这些电子邮件?
  • @zerkms 这是什么答案?你的任何其他好主意;-)
  • “你是怎么得出这个意见的?”RFC822第6.1节。

标签: php regex validation email email-validation


【解决方案1】:

试试这个:

^(|(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})$

另一种方式:

^(|(([A-Za-z0-9]+)|([A-Za-z0-9]+)|([A-Za-z0-9]+(\.[_a-z0-9-]+)+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})$

不匹配:

test-.@gmail.com
test.@gmail.com
test__@gmail.com
__--.test@gmail.com
john__doe@gmail.com
john..doe@xuse.de
john--doe@xuse.de
test_test@gmail.com

匹配:

12test21@gmail.com
1.test@gmail.com
test.test@gmail.com

【讨论】:

  • 谢谢我已经试过了,它比我以前用过的效果更好。非常感谢。
  • john__doe@gmail.com, john..doe@xuse.de 也 john--doe@xuse.de 仍然可以工作,但也是这样一个在注册时无效的电子邮件。
  • @Mann87 你想要没有_..- 吗?
  • 我用另一种方式更新了我的问题,请检查一下
【解决方案2】:

为什么不使用http://php.net/manual/en/function.filter-var.php

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
  echo("$email is a valid email address");
} else {
  echo("$email is not a valid email address");
}

在此处查看过滤器定义。 http://php.net/manual/en/filter.filters.validate.php

验证值是否是有效的电子邮件地址。

通常,这会根据 RFC 中的语法验证电子邮件地址 822,除了 cmets 和空格折叠和 不支持无点域名。

【讨论】:

  • 您好,感谢您的好回答。在普通的 PHP 项目中,我会说这是最好的答案,但在我们的情况下不可用。我搜索了一个正确的正则表达式代码来使用。
  • 我知道有时本地函数不够严格。我认为可能是“不支持 cmets 和空格折叠以及无点域名的例外情况”。部分将满足您的需求。仍然是一个不错的选择:)
  • @Mann87 为什么不可用?您的问题中没有发现任何限制。
  • @AlexHowansky 是的,我在我的问题中忘记了。对不起。由于代码结构和 php 版本,它不可用。所以我真的需要一个经验。
  • @Mann87 filter_var() 自 10 多年前的 v5.2.0 以来一直在 PHP 中使用——如果您使用的版本比这更早,您需要担心更严重的问题。 ..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 2017-06-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
相关资源
最近更新 更多