【问题标题】:One-line email regex works but multi-line version doesn't单行电子邮件正则表达式有效,但多行版本无效
【发布时间】:2017-04-08 08:10:21
【问题描述】:

我发现this 正则表达式用于电子邮件。我试图把它变成一个多行版本。但是在我这样做之后它就停止工作了:

const emailOne = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

const email = RegExp(
  /* eslint-disable */
  '^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|' +
  '(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|' +
  '(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
  /* eslint-enable */
)

emailOne.test('abc@gmail.com')

emailTwo.test('abc@gmail.com')

emailOne 返回trueemailTwo 返回false。为什么会是这个原因?

编辑:

我意识到RegExp 修改了原来的正则表达式(破坏了它):

// regex created by RegExp
/^(([^<>()[]\.,;:s@"]+(.[^<>()[]\.,;:s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/

// emailOne
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

【问题讨论】:

  • @Pang 修正了答案。
  • “单行电子邮件正则表达式有效”不,它没有。您的正则表达式排除了大量完全有效的电子邮件地址。 stackoverflow.com/a/201378/362536
  • 这是一个先前的问题,询问与似乎相同的正则表达式相同的问题。 stackoverflow.com/questions/12317049/… 接受的答案应该满足您的需求。
  • @Brad 这是第一个弹出的 Google 结果。我包含了链接。
  • @alex 验证电子邮件地址的最安全方法是发送一封请求用户操作的电子邮件。

标签: javascript regex


【解决方案1】:

您的第一个正则表达式是用正则表达式指定的。你的第二个是用字符串指定的,你忽略了用另一个反斜杠转义反斜杠。 \\

【讨论】:

    猜你喜欢
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多