regex - 匹配 Azure 负载均衡器名称的正则表达式
问题描述
如何使用正则表达式验证天蓝色负载均衡器名称?
规则是:
- 可以包含字母数字、下划线、句点和连字符。
- 以字母数字开头。
- 以字母数字或下划线结尾。
- 长度在 1-80(含)之间
我尝试使用^[A-Za-z0-9][A-Za-z0-9_.-]{1,80}$
,但它匹配以句点结尾的字符串、81 个字符的字符串并且不匹配只有 1 个字符的字符串。
解决方案
您尝试的模式至少匹配 2 个字符,因为这部分[A-Za-z0-9]
匹配单个字符,这部分[A-Za-z0-9_.-]{1,80}
匹配至少 1 个字符,最多可以匹配 81 个字符。
您可以使用字母数字字符开始匹配,然后可以选择匹配匹配其中之一的 0-78 个字符[A-Za-z0-9.-]
并结束匹配,[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_]
匹配单个字母数字或下划线
)?
关闭组并使其可选$
字符串结束
如果您不想匹配连续的连字符或点,您也可以使用
^(?=[A-Za-z0-9_.-]{1,80}$)[A-Za-z0-9][A-Za-z0-9_]*(?:[.-][A-Za-z0-9_]+)*$
推荐阅读
- .net - 如何在 Visual Studio 设计器中启用窗体的视觉样式?
- neo4j - 如何在 neo4j 中显示所有节点和两个节点之间的关系?
- jenkins - 詹金斯构建过程永远运行
- plotly - 如何在同一行中制作三个绘图图表?
- wordpress - 如何将店面主题页脚小部件移出页脚行?
- react-native - 在 react native 中,如何设置一个事件处理程序,当用户从元素外部拖动到元素内部时做出反应?
- python - 如何在没有内置方法的python中查找关键字前后的单词
- c++ - 是否可以在调用后自动推断指向三元中成员重载函数的指针的类型?
- makefile - 如何在Makefile中patsubst多个路径?
- prolog - 在 Prolog 中使用匿名变量和“普通”变量时的不同答案