【问题标题】:Regular expression to match Azure load balancer name匹配 Azure 负载均衡器名称的正则表达式
【发布时间】:2020-09-23 14:30:58
【问题描述】:

如何使用正则表达式验证 Azure 负载均衡器名称?

rules 是:

  • 可以包含字母数字、下划线、句点和连字符。
  • 以字母数字开头。
  • 以字母数字或下划线结尾。
  • 长度在 1-80(含)之间

我尝试使用^[A-Za-z0-9][A-Za-z0-9_.-]{1,80}$,但它匹配以句点结尾的字符串、81 个字符的字符串并且不匹配只有 1 个字符的字符串。

【问题讨论】:

  • 如果支持 Lookbehinds,一种方法是 ^[A-Za-z0-9][A-Za-z0-9_.-]{0,79}(?<=[A-Za-z0-9_])$。也支持 Unicode 的较短版本:^[^\W_][\w.-]{0,79}(?<=\w)$.
  • 试试^[A-Za-z0-9](?:[A-Za-z0-9.-]{0,78}[A-Za-z0-9_])?$

标签: regex azure


【解决方案1】:

您尝试的模式至少匹配 2 个字符,因为这部分 [A-Za-z0-9] 匹配单个字符,而这部分 [A-Za-z0-9_.-]{1,80} 匹配至少 1 个字符,最多可以匹配 81 个字符。


您可以使用字母数字字符开始匹配,然后可以选择匹配匹配 [A-Za-z0-9.-] 之一的 0-78 个字符并以 [A-Za-z0-9_] 结束匹配,因此它也可以以下划线结尾。

^[A-Za-z0-9](?:[A-Za-z0-9.-]{0,78}[A-Za-z0-9_])?$

说明

  • ^ 字符串开始
  • [A-Za-z0-9] 匹配单个字母数字
  • (?:非捕获组
    • [A-Za-z0-9.-]{0,78} 匹配任何列出的允许字符的 0-78 次重复
    • [A-Za-z0-9_] 匹配单个字母数字或下划线
  • )? 关闭群组并将其设为可选
  • $ 字符串结束

Regex demo

如果你不想匹配连续的连字符或点,你也可以使用

^(?=[A-Za-z0-9_.-]{1,80}$)[A-Za-z0-9][A-Za-z0-9_]*(?:[.-][A-Za-z0-9_]+)*$

Regex demo

【讨论】:

  • 应该是"^[A-Za-z0-9](?:[A-Za-z0-9._-]{0,78}[A-Za-z0-9_ ])?$"?,因为它也可以在字符串中间包含下划线。
  • @QiongKaiYe 是的,这种情况下你可以在字符类中加下划线。
猜你喜欢
  • 2020-05-29
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多