【问题标题】:Regex limit repeated class sub character正则表达式限制重复的类子字符
【发布时间】:2018-09-07 13:42:06
【问题描述】:

我有一个在 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. 这样的错误电子邮件地址

任何想法将不胜感激。

【问题讨论】:

  • 您是否尝试过搜索电子邮件正则表达式?这个问题肯定已经被问过无数次了
  • 我有,事实上这就是我在问题中的基本正则表达式中得出的方式。

标签: java regex email-address


【解决方案1】:

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

^(?!.*\.\.)[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}

【讨论】:

  • 非常感谢您的帮助。我不认为像你那样给班级加前缀。也感谢您提供更多信息。
猜你喜欢
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
相关资源
最近更新 更多