【发布时间】:2022-11-22 17:52:37
【问题描述】:
格式目标: 要求a.b.c.d/x哪里>>
- a是1-223之间的1-3位数字
- b、c、d为0-255之间的1-3位数字,*必填
- x 是 8-32 的 1 位或 2 位数字,并且(/x) 组是可选的
这是我现在拥有的完整正则表达式:
^(((?:22[0-3]|2([0-1])?\d?|([1-9][0-9]?|1[0-9]{2}))\.)((?:25[0-5]|2[0-4]\d|[01]?(\d{0,2}))\.){2}((25[0-5]|2[0-4]\d|[01]?(\d{0,2}))(\/([89]|[12]\d|3[0-2]))?),?\s?){1,50}$
**我遇到的问题是:如果“1.1.1”。输入(又名没有'd'组),它正在通过验证。我希望它在没有 'd' 组的情况下失败 **
这是为了我自己的理智/可读性而分成几组的怪物,并添加了空格: // 开始字符串,完整组
^(
// a group, 1-223 with "."
((?:22[0-3]|2([0-1])?\d?|([1-9][0-9]?|1[0-9]{2}))\.)
// b and c groups 0-255 with "."
((?:25[0-5]|2[0-4]\d|[01]?(\d{0,2}))\.){2}
// d group, ends with optional netmask instead of "." // i tried making this non-optional as a group to solve my problem.
((25[0-5]|2[0-4]\d|[01]?(\d{0,2}))
// netmask
(\/([89]|[12]\d|3[0-2]))?)
// allow comma separated, optional space between, up to 50 IPs
,?\s?){1,50}$
(我现在意识到这个逗号是可选的,所以他们可以只用一个空格分开。也许我也可以防止这种情况发生)。
【问题讨论】:
-
更新版本...我认为解决了这个
^(((22[0-3]|2([0-1])?\d?|([1-9][0-9]?|1[0-9]{2}))\.)((25[0-5]|2[0-4]\d|([0-9][0-9]?|1[0-9]{2}))\.){2}((25[0-5]|2([0-1])?\d?|([0-9][0-9]?|1[0-9]{2}))(\/([89]|[12]\d|3[0-2]))?),?\s?){1,50}$<< 问题是 b 和 c 部分中的[01]?(\d{0,2}。他们使整个数字成为“可选”,因为有人在使用 ?一个允许 0 位数字。
标签: regex expression ip-address