【问题标题】:Email Regex validator not allowing return电子邮件正则表达式验证器不允许返回
【发布时间】:2016-11-28 10:27:41
【问题描述】:

我在 HTML 文本区域中有这个正则表达式验证表达式,以避免用户在那里输入电子邮件地址:

/.*^((?![a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+).)*$/

验证器工作正常,但是,当输入返回时,表达式将不再允许任何文本。比如:

此处为第 1 行(没有电子邮件,一切都很好)

[返回后不允许再输入]

试图研究,但找不到任何有用的东西,在此先感谢!

【问题讨论】:

  • 正则表达式没有多大意义,尤其是开头.*^。如果您使用的是 javascript,请将其替换为 ^[\s\S]*。自从. 与换行符不匹配后,我的第一个猜测。
  • 实际上,.*^ 部分始终与此处的字符串开头匹配。正则表达式匹配一个看起来不像电子邮件的字符串。如果锚点与行边界匹配,那么它只会使该行失败(如果任何行类似于电子邮件)。请提供一些代码。
  • 如果用户添加一些间距或替换“@”,例如使用“[at]”仍然可以输入人类可读的电子邮件地址...

标签: regex validation email


【解决方案1】:

使用

^((?![a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+[.][a-zA-Z0-9-.]+)[\s\S])*$
                                                     ^^^^^^

. 与换行符不匹配。

this JS fiddle

请注意,tempered greedy token 是一种资源消耗模式,我宁愿建议使用简单的前瞻解决方案:

^(?![\s\S]*?[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+[.][a-zA-Z0-9-.]+)[\s\S]*

this JS fiddle

这里,^ 将断言字符串的开头,(?![\s\S]*?[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+[.][a-zA-Z0-9-.]+) 否定前瞻将在文本区域中找到类似电子邮件的字符串后匹配失败,[\s\S]* 将匹配整个内容(如果您的实现需要整个字符串匹配,如果不是 - 删除它)。

【讨论】:

  • 非常感谢!替换“。” by "[\s\S])" 完成了这项工作。
  • 很高兴它对你有用。如果我的回答对您有帮助,也请考虑投票(请参阅How to upvote on Stack Overflow?)。获得 15 分后,您可以在 SO 上投票。
猜你喜欢
  • 2011-09-04
  • 2011-07-27
  • 2021-12-18
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2014-04-14
相关资源
最近更新 更多