【问题标题】:Prevent repeating special character and by specific count using RegEx For Email使用 RegEx For Email 防止重复特殊字符并按特定计数
【发布时间】:2023-03-06 03:17:01
【问题描述】:

如何使用 RegEx 测试以下模式:

  1. 字符串长度无关紧要。

  2. 特殊字符符号 (-) 不应连续重复。

  3. 特殊字符符号 (-) 在整个字符串中的出现次数不得超过 两次,并且 (.) 符号在邮件域之前出现的次数不得超过两次

示例案例:

匹配:

Jessica-Parker@gmail.com
Jessica-Parker@gmail.com
Jessica-Parker-Smith@gmail.com
Jessica.Parker-Smith@gmail.com
Jessica.Parker.Smith@gmail.com

不匹配:

Jessica--Parker@gmail.com
Jeff--smith-Parker@gmail.com
Jessica-Parker--@gmail.com
Jessica-Parker-@gmail.com
Jessica.P.Jane.Smith@gmail.com
Jessica..P.Jane.Smith@gmail.com

与第三部分斗争,我想出前两部分为:

^(?!.*(-)\1{2})(\w[\w\.-]*@[a-zA-Z]+\.[a-zA-Z]+)\b

【问题讨论】:

  • 请举例说明您的意思。谢谢
  • 检查regex101.com/r/982mCF/1,请将不适合您的示例添加到此正则表达式小提琴并分享。
  • @WiktorStribiżew:已更新查询。谢谢,会试一试的!
  • 查看更新后的答案。

标签: regex validation string-matching regex-group regex-negation


【解决方案1】:

你可以使用

^(?![^@]*([-.])\1)(?![^@]*([-.])(?:[^@]*\2){2})\w(?:[\w.-]*\w)?@(?:[a-zA-Z]+\.)+[a-zA-Z]+$

请参阅regex demo

详情

  • ^ - 字符串开头
  • (?![^@]*([-.])\1) - 除了@ 之外,0 个或多个字符后的任何地方都不允许使用双连字符/点
  • (?![^@]*([-.])(?:[^@]*\2){2}) - 不允许有 3 个或更多 -/. 字符在 @ 以外的任何 0 个或多个字符之后
  • \w - 一个字字符
  • (?:[\w.-]*\w)? - 0 个或多个单词的可选序列,.- 字符后跟一个单词 char
  • @ - 一个 @ 字符
  • (?:[a-zA-Z]+\.)+ - 1+ 个字母出现 1 次或多次,后跟一个点
  • [a-zA-Z]+ - 1+ 个字母
  • $ - 字符串结束。

【讨论】:

  • @Jason 你应该已经发布了完整的正则表达式并解释了真正的要求。这似乎是一个完全不同的问题,试试something like this
  • 抱歉,我的要求是电子邮件。我可以允许一个特殊字符,但不能允许两次。我想第三次限制它
  • @Jason 所以使用regex101.com/r/76CymT/2中所示的技术
  • 未按预期工作。只接受一个 - 特殊字符。我需要两个被接受
  • @Jason 然后问正确的问题。您当前的问题已得到解答。
猜你喜欢
  • 2017-12-10
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 2015-02-15
相关资源
最近更新 更多