在文本域中输入多个ip地址并已逗号分隔,怎么用js的正则表达式校验呢
/^((\d{1,3}\.){3}\d{1,3},)?(\d{1,3}\.){3}\d{1,3}$/g
const reg = /^((\d{1,3}\.){3}\d{1,3},)?(\d{1,3}\.){3}\d{1,3}$/g
reg.test('1.1.1.1,0.0.0.1')
// => true
reg.test('1.1.1.1,0.0.0.')
// => false
reg.test('1.1.1.1')
// => true
reg.test('1.1.1.1,')
// => false
13 回答12.7k 阅读
7 回答1.8k 阅读
3 回答1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1k 阅读✓ 已解决
[修改(20170906:2109)] - 忘了 IP 段可以为 0,所以修改了下,现在范围是 0.0.0.0 ~ 255.255.255.255
先来验证一个 IP,每个 IP 分为 4 个段,每个段的规则如下
/[1-9]/
/[1-9]\d/
/1\d{2}/
或者/1\d\d/
/2[0-4]\d/
/25[0-5]/
然后把这些规则用
|
组合起来,就是 IP 中的一段的验证规则/[1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]/
四段组合成的 IP 是由一个上述的一段加三个带点号验证的一段,所以是
示意:
/one(?:\.one){3}/
,写出来就是/(?:[0-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])(?:\.([0-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){3}/
逗号分隔的多个IP,那就是,每个前面是逗号(
,
)或起始标记(^
),一共无数个……所以/^(?:(?:^|,)(?:[0-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])(?:\.(?:[0-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){3})+$/
补充
说实在的,写正则确实痛苦,可以写个函数来解决,可能更容易懂也更不容易出错