【问题标题】:ORACLE regex Match email Domain with two or more charactersORACLE 正则表达式 匹配具有两个或多个字符的电子邮件域
【发布时间】:2020-07-10 18:39:43
【问题描述】:

我需要能够接受只有两个或更多字符的电子邮件域,如下所示:

使用我的实际正则表达式,我仅使用一个字符验证域,例如 a@b.com。

@([A-Z0-9]+(-[A-Z0-9]+)*\.){1,8}[A-Z]{2,63}$

预期结果:

"a@b.com" Not valid  (just one char after @)
"a@bb.com" Is Valid  (two chars after @)
"a@b-domain.com" Is valid  (two or more chars after @)

我只需要更改我的正则表达式以允许以至少 2 个字符开头的域。

谢谢。

【问题讨论】:

  • 然后试试@[[:alnum:]][-[:alnum:]]+\.[A-Za-z]{2,63}$

标签: regex oracle11g


【解决方案1】:

作为previous question 中最后一期的建议,您可以使用

@([A-Z0-9]+-)*[A-Z0-9]{2,}\.[A-Z0-9]{2,63}$
  • @ 字面匹配
  • ([A-Z0-9]+-)* 0+ 重复 1+ 字符 A-Z0-9 后跟 -
  • [A-Z0-9]{2,} 匹配 2 次或更多次 A-Z0-9
  • \.[A-Z0-9]{2,63}匹配一个点和2-63次A-Z0-9
  • $字符串结束

Regex demo

要允许连字符或下划线,您可以使用字符类:

@([A-Z0-9]+[_-])*[A-Z0-9]{2,}\.[A-Z0-9]{2,63}$

Regex demo

【讨论】:

  • 非常感谢,它有效。我刚刚注意到我的正则表达式不考虑'_'(下划线)。如果它们被允许,并且它们遵循与连字符相同的规则,我可以在哪里插入正则表达式?
  • @LEOPOLDO 在这种情况下,您可以使用字符类 @([A-Z0-9]+[_-])*[A-Z0-9]{2,}\.[A-Z0-9]{2,63}$ regex101.com/r/J6KmkM/1
  • 你好。有一个问题,我现在才注意到。 @([A-Z0-9]+-)*[A-Z0-9]{2,}\.[A-Z0-9]{2,63}$ 只接受一个点 '.'在所有领域。在它接受带有两个点可能性的“abc@bbd.fff.com”之前。你能帮忙吗?
  • @LEOPOLDO 是的,当然,您可以使用量词和组来接受 1 个或多个 @([A-Z0-9]+[_-])*[A-Z0-9]{2,}(\.[A-Z0-9]{2,63})+$ regex101.com/r/IwqPVr/1 或使用 @([A-Z0-9]+[_-])*[A-Z0-9]{2,}(\.[A-Z0-9]{2,63}){1,2}$ 来接受 1 或 2 个事件。
  • 再次感谢。原谅我,我有点菜鸟。我原来的正则表达式有可能接受直到 8 个子域“{1,8}。你能告诉我如何改变 '@([A-Z0-9]+-)*[A-Z0-9]{2 ,}\.[A-Z0-9]{2,63}$' 和 '@([A-Z0-9]+[_-])*[A-Z0-9]{2,}\.[ A-Z0-9]{2,63}$'。对于给您带来的不便,我深表歉意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2018-11-09
  • 2023-03-29
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
相关资源
最近更新 更多