【问题标题】:Regex / Pattern HTML email正则表达式/模式 HTML 电子邮件
【发布时间】:2018-04-19 09:36:32
【问题描述】:

有没有办法关联两个正则表达式?

我有一个阻止用户使用此电子邮件的邮件 (test@test.com)

pattern="^((?!test@test.com).)*$"

我也有一个验证电子邮件语法的工具

pattern="[a-z0-9._%+-]{3,}@[az]{3,}([.]{1}[az]{2,}|[.]{1 }[az]{2,}[.]{1}[az]{2,})"

如何合并这两个正则表达式以防止用户到用户 test@test.com 并验证电子邮件语法?

我尝试使用 OR 运算符(单管道),但我遗漏了一些东西,它不起作用...

谢谢!

【问题讨论】:

  • 验证电子邮件会容易得多(例如通过正则表达式),然后通过纯字符串比较单独检查电子邮件是否不是“test@test.com”。
  • 可能你想要pattern="(?!test@test.com$)[\w.%+-]{3,}@[a-z]{3,}\.[a-z]{2,}(?:\.[a-z]{2,})?"
  • @WiktorStribiżew 它有效!你能在答案中解释一下吗?

标签: html regex


【解决方案1】:

看来你可以用

pattern="(?!test@test\.com$)[a-z0-9._%+-]{3,}@[a-z]{3,}\.[a-z]{2,}(?:\.[a-z]{2,})?"

请注意,HTML5 模式会自动锚定,因为它们在开始/结束时用 ^(?:)$ 包裹,因此无需在模式的开始/结束处添加 ^$

如果输入字符串等于test@test.com 字符串,(?!test@test\.com$) 否定前瞻将导致匹配失败(与您的第一个正则表达式不同,它只会使包含电子邮件的输入失败)。

剩下的是你的第二个模式,我只删除了隐含的{1},并将一个交替组收缩到\.[a-z]{2,}(?:\.[a-z]{2,})?,其中(?:\.[a-z]{2,})?是一个可选的非捕获组,匹配1或0个.序列和2 个或更多小写 ASCII 字母。

A-Z 添加到字符类中以也支持大写ASCII 字母。

【讨论】:

  • 如果我需要IE 11支持这种模式,是否需要添加^和$?
  • @Defoncesko HTML5 在开始/结束时自动添加^$。这种模式在所有浏览器中都一样。
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 2012-01-02
  • 2015-12-03
  • 1970-01-01
  • 2016-11-30
相关资源
最近更新 更多