电子邮件正则表达式验证器不允许使用回车

3

我在HTML文本区域中使用此正则表达式验证表达式,以避免用户在其中输入电子邮件地址:

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

验证器工作正常,但是当输入回车后,表达式将不允许再输入任何文本。就像这样:

第一行(没有电子邮件,所以一切都好)

[在回车后不允许再输入]

尝试过搜索,但找不到有用的信息,谢谢!

正则表达式并不是很有意义,特别是开头的 .*^。如果你正在使用 JavaScript,则将其替换为 ^[\s\S]*。这是我的第一个猜测,因为 . 不匹配换行符。 - HamZa
实际上,.*^ 部分总是匹配字符串的开头。该正则表达式匹配不像电子邮件的字符串。如果锚点匹配行边界,则它只会失败于该行(如果任何一行类似于电子邮件)。请提供一些相关代码。 - Wiktor Stribiżew
如果用户添加一些空格或替换 '@',例如使用 '[at]',仍然可以输入可读的电子邮件地址... - bw_üezi
1个回答

0

使用

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

. 不匹配换行符。

请参见这个JS fiddle

请注意,温和的贪婪标记是一种消耗资源的模式,我建议使用简单的前瞻解决方案:

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

请查看这个JS fiddle

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


非常感谢!用 "[\s\S])" 替换 "." 就解决了问题。 - jrglayos
很高兴它对你有用。如果我的回答对你有帮助,请考虑点赞(请参阅如何在Stack Overflow上点赞?)。在获得15个积分后,你就可以在SO上点赞了。 - Wiktor Stribiżew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接