子域的正则表达式
Regex for sub domain
我有一个可以生成一级子域的系统,我想要一个正则表达式来在创建子域之前验证它。
到目前为止我想出了:
^[a-zA-Z0-9]+[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]*$
来自我的测试用例
- 限制在开头和结尾使用连字符
- 只允许字母、数字和连字符
- 将总长度限制为 63
我仍然不确定我的模式是否正确。如果有人能给我一个更好的正则表达式或指出我忘记的任何规则,请告诉我。
你的模式有几个问题:
在第一个字符后使用 +
量词 class 允许无限长的字符串({0,61}
量词变得多余)。
在最后一个字符 class 之后使用 *
量词允许它匹配零个字符(这使得模式在末尾接受连字符)并且也具有相同的问题如上
您可以使用:
^(?=[a-zA-Z0-9].{0,62}$)[a-zA-Z0-9\-]*[a-zA-Z0-9]$
Demo.
细分:
^
- 字符串的开头。
(?=
- 积极的开始 Lookahead。
[a-zA-Z0-9]
- 第一个字符只能是字母数字。
.{0,62}
- 后跟最多 62 个字符。
$
- 然后,字符串结束。
)
- 前瞻结束。
[a-zA-Z0-9\-]*
- 匹配 0 个或多个字母数字字符或连字符。
[a-zA-Z0-9]$
- 匹配字符串末尾的一个字母数字字符。
如果您需要设置最小长度,只需将 {0,62}
更改为 {n,62}
,其中 n+1
是最小长度。或者您可以去掉 Lookahead(只要最小长度 >= 2)并使用:
^[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]$
...用 {n,61}
替换 {0,61}
其中 n+2
是最小长度。
我有一个可以生成一级子域的系统,我想要一个正则表达式来在创建子域之前验证它。
到目前为止我想出了:
^[a-zA-Z0-9]+[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]*$
来自我的测试用例
- 限制在开头和结尾使用连字符
- 只允许字母、数字和连字符
- 将总长度限制为 63
我仍然不确定我的模式是否正确。如果有人能给我一个更好的正则表达式或指出我忘记的任何规则,请告诉我。
你的模式有几个问题:
在第一个字符后使用
+
量词 class 允许无限长的字符串({0,61}
量词变得多余)。在最后一个字符 class 之后使用
*
量词允许它匹配零个字符(这使得模式在末尾接受连字符)并且也具有相同的问题如上
您可以使用:
^(?=[a-zA-Z0-9].{0,62}$)[a-zA-Z0-9\-]*[a-zA-Z0-9]$
Demo.
细分:
^
- 字符串的开头。(?=
- 积极的开始 Lookahead。[a-zA-Z0-9]
- 第一个字符只能是字母数字。.{0,62}
- 后跟最多 62 个字符。$
- 然后,字符串结束。
)
- 前瞻结束。[a-zA-Z0-9\-]*
- 匹配 0 个或多个字母数字字符或连字符。[a-zA-Z0-9]$
- 匹配字符串末尾的一个字母数字字符。
如果您需要设置最小长度,只需将 {0,62}
更改为 {n,62}
,其中 n+1
是最小长度。或者您可以去掉 Lookahead(只要最小长度 >= 2)并使用:
^[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]$
...用 {n,61}
替换 {0,61}
其中 n+2
是最小长度。