RegEx Javascript - 我做错了什么?

时间:2012-01-11 13:28:22

标签: javascript regex

我将此模式存储在变量中:

var regexServer = /^([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\:[0-9]{2,4}$/;

if(!stringFromArgument.match(regexServer))
   alert("You must input a valid IP and a Port address! Eg: 66.77.88.99:8000");

我检查了来自输入(表单)的字符串,没关系。

如果有人想要添加自己的IP和端口地址,他必须添加一个有效的表单。他的字符串必须只包含.:,数字和空格。

我做错了什么?

4 个答案:

答案 0 :(得分:1)

你的问题是什么?

我看到两件事

/^([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\:[0-9]{2,4}$/
              ^              ^              ^              ^
                                                            ^
  • 我的第一行标记中的量词是错误的。
  • 不需要在第二行标记的转义,因为“:”不是特殊字符。

答案 1 :(得分:1)

您接受10到255之间的IP号码,也许您应该将量词从{2,3}更改为{1,3},否则将拒绝IP地址如128.0.0.1:80。

答案 2 :(得分:1)

我认为您的RegExp不起作用,因为+个字符。

这应该有用,在我看来是一个更有效的正则表达式:/^([0-9]{1,3}(\.?)){4}:[0-9]{2,5}$/

每个级别应该允许1个数字。例如:82.176.103.6如果您没有匹配则不匹配。此外,端口的数量应为5,因为最高端口号为65535

答案 3 :(得分:0)

首先,如果你只是测试,就不需要放(…)+。 此外,您已将第3和第4个数字限制为2+,但可能会有低于10的数字以及端口可能大于9999。

var regexServer = /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{2,4}$/

此外,此正则表达式仅检查格式是否正确,但不验证ip(检查数字是否在0-255之间)。这里有一些正则表达式(没有端口检查,你可以自己添加):

var regexServer = /^(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9])[.]){3}(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9]))$/