gpt4 book ai didi

java - 正则表达式限制重复类子字符

转载 作者:行者123 更新时间:2023-12-02 02:14:09 26 4
gpt4 key购买 nike

我有一个在 Java 中使用的电子邮件地址过滤正则表达式。它在大多数情况下都有效,除非尝试限制电子邮件地址的用户名部分中的重复点。

我正在使用的正则表达式(已删除转义)是 [a-zA-Z0-9\.\_\-]+@[a-zA-Z0-9]+\.[a- zA-Z]{2,5}(\.[a-zA-Z]{2,5}){0,1}

这不会捕获像 test..test@test.com 这样的错误电子邮件地址。 我已经尝试将限制器应用于类 [a-zA-Z0-9\.\_\-] 但这会导致它在有效的电子邮件地址上失败。

如有任何想法,我们将不胜感激。

最佳答案

为锚定开始的两个点添加负前瞻:

^(?!.*\.\.)[a-zA-Z0-9._-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,5}(\.[a-zA-Z]{2,5}){0,1}

此表达式 (?!.*\.\.) 表示以下文本包含 2 个连续的点。

顺便说一句,当大多数字符位于字符类中时,您不需要转义它们,包括字符 ._-,即 [a-zA-Z0-9\.\_\-][a-zA-Z0-9._-] 相同(但需要注意的是,破折号在第一次出现时是文字破折号,或者最后)。

<小时/>

使用前瞻可以轻松添加整体约束,您可以轻松添加更多约束,例如,要求整体长度至少为 10 个字符,则在前面添加 (?=.{10}) :

^(?=.{10})(?!.*\.\.)[a-zA-Z0-9\.\_\-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,5}(\.[a-zA-Z]{2,5}){0,1}

关于java - 正则表达式限制重复类子字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49541827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com