【问题标题】:Email validation Javascript RegExp电子邮件验证 Javascript RegExp
【发布时间】:2012-09-15 21:10:24
【问题描述】:

使用这个正则表达式,我可以轻松检查电子邮件是否有效:

RegExp(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/);

但是,对于这样的地址,这只会返回 true:

example@example.com

我也想接受:

*@example.com

我需要对我的 RegExp 应用哪些更改?

提前致谢

【问题讨论】:

标签: javascript regex email-validation


【解决方案1】:

要从字面上回答您的问题,您可以“增强”您的正则表达式:

RegExp(/^([\w.*-]+@([\w-]+\.)+[\w-]{2,4})?$/);

但对于电子邮件验证来说,这是一个糟糕的正则表达式。正则表达式是错误的工具。你为什么insist on doing it this way

【讨论】:

  • 我将使用 Regex 进行客户端电子邮件验证(JS),在服务器端我使用 FILTER_VAR 和 PHP,使用 Javascript 进行电子邮件验证的下一个方法是什么?为什么这很可怕?这不能接受一些有效的电子邮件地址吗?
  • 这接受 -@-.--,我猜 /^[\w-\.\d*]+@[\w\d]+(\.\w{2,4 })$/ 更好,因为它不接受 -@-.--
  • @behz4d:您的正则表达式仅拒绝该地址,因为它(正则表达式)包含语法错误。 @ 之前的字符类中的破折号位置错误,因此被忽略。因此,它不接受 @ 之前的 any 破折号。
  • 我刚刚检查过,它允许在@之前使用破折号
  • 如果是这样,那么它允许与我的正则表达式相同的匹配项(当然除了*)。
【解决方案2】:

两件事:接受*@foo.bar

var expression = /^([\w-\.*]+@([\w-]+\.)+[\w-]{2,4})?$/;//no need to pass it to the RegExp constructor

但这个表达式确实接受-@-.--,但话又说回来,正则表达式和电子邮件并不是很好的朋友。但根据您的表述,这是一个不太可靠的版本:

var expression = /^[\w-\.\d*]+@[\w\d]+(\.\w{2,4})$/;

有一个表达式可以验证所有有效类型的电子邮件地址,但在网络上的某个地方。调查一下,看看为什么正则表达式验证几乎总是会排除有效输入或过于宽容

【讨论】:

    【解决方案3】:

    检查电子邮件地址并不是那么简单,参见。 RFC 822, sec 6.1.

    可以在http://www.regular-expressions.info/email.html 找到一个很好的正则表达式列表,描述了 RFC 一致性和实用性之间的权衡。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2011-10-20
      • 2011-02-16
      • 1970-01-01
      • 2013-11-07
      • 2015-08-26
      • 2018-03-13
      • 2014-05-29
      相关资源
      最近更新 更多