我使用此模式检查字段的形式是否为IP地址:
192.168.1.1 --> It will be OK
192.168.*.* --> It will be OK
192.168.2-3.0-128 --> It will be OK
192.168.2-3.* --> It will be OK
但是我需要考虑具有带星号的八位字节的字段的值' *'或范围' 0-255'。
例如:
{{1}}
有什么想法吗?非常感谢你!
答案 0 :(得分:2)
对于您提供的特定输入字符串,请从以下内容开始:
^(\d{1,3})\.(\d{1,3})\.(\*|(?:\d{1,3}(?:-\d{1,3})?))\.(\*|(?:\d{1,3}(?:-\d{1,3})?))$
在您的JavaScript中,这将成为:
var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\*|(?:\d{1,3}(?:-\d{1,3})?))\.(\*|(?:\d{1,3}(?:-\d{1,3})?))$/;
你可以进一步消除模式中的重复,但这将使你从提供的内容的演变开始变得更加清晰:从一个更冗长,重复的模式开始;得到可靠的正面和负面测试;然后重构以根据需要/期望消除重复。
答案 1 :(得分:0)
这里至少有两个问题:
你的正则表达式应该在允许的位置匹配星号。请参阅J0e3gan的回答中的正则表达式。
您正在循环遍历match
返回的数组的索引0-3。 match
返回索引0中的完整字符串以及以下索引中的每个段。因此,您的for循环应如下所示:for (i = 1; i <= 4; i++) { // processing }
。