使用变量中的括号检查语法

时间:2015-02-11 22:37:24

标签: javascript regex

我有一个带字段的表单。他们需要输入的格式如下。 10.222.92.160(asxvlc558-ipsn),10.222.92.161(asxvlc559-ipsn),10.222.92.162(asxvlc560-ipsn)

我不太关心parens之间的什么,但我确实关心Parens所在的IP格式和逗号分隔。

有人可以提供一段代码。香港专业教育学院曾尝试使用RegExp来做到这一点,但无法正确匹配。

这是表格线

<textarea name="ro_access" onchange='validatehost(this.value)'>
10.10.10.10(somehost01-ipsn),10.10.10.11(somehost02-ipsn)</textarea></td>

这是我对JS部分的抨击。没有太多的JS家伙所以不要笑得多。

function validatehost( value ) {
    var ipRE = new RegExp('\d+\.\d+\.\d+\.\d+\(*\),');
        var r = ipRE.test(value);
if (r >= 0) {
    alert("Hostnames are not in the Right Format. Use:ip(hostname),");
         document.NFSNew.ro_access.focus();
         return false;
}
  }

3 个答案:

答案 0 :(得分:1)

正则表达式语法错误,您匹配(&#34;零或更多&#34;通过*量词来量化它的时间。相反,您可以使用.并使其成为非贪婪的匹配。

如果格式可以重复,我会将其放在一个组中并使用锚点。

var ipRE = /^\s*(?:\d+\.){3}\d+\(.*?\)(?:,(?:\d+\.){3}\d+\(.*?\))*\s*$/

注意:此处使用正则表达式文字而不是RegExp对象要容易得多。

答案 1 :(得分:0)

这是一个简单的例子:

function validatehost (value) {
  var ipRE = /^\s*(?:\d+\.\d+\.\d+\.\d+\(.*?\)(?:,(?!\s*$)|\s*$))+$/;
  alert(ipRE.test(value));
}
<textarea id="text" cols="40">
10.10.10.10(somehost01-ipsn),10.10.10.11(somehost02-ipsn)
</textarea>
<button onclick="validatehost(document.getElementById('text').value)">Validate</button>

主要错误是:

new RegExp('\d+\.\d+\.\d+\.\d+\(*\),');

您正在将字符串传递给RegExp构造函数,但是您的反斜杠丢失了:在JS控制台中键入"\d",您会看到它最终为"d"。你要么必须加倍反斜杠,要么像我在那里那样使用正则表达式文字。

我也改变了正则表达式。它应该符合您的需求。

答案 2 :(得分:0)

这应该做:

function validateHost(hosts) {
    return /^\s*(?:(?:\d{1,3}\.){3}\d{1,3}\([a-zA-Z0-9-]+\)(?:,\d|$))+\s*$/.test(hosts);
}

对于主机名部分,它将接受此字符a-zA-Z0-9-(全部为小写,全部为大写和所有数字),如果您不在乎,可以放置.+?,这意味着任何事情,但至少1个字符。对于ip部分,每个数字最多需要3位数1和4个数字。它不是万无一失的,因为有人可以输入一个高于255的数字,但应该非常可靠。如果您想要完美匹配并且不希望字符串周围有任何空格,请删除\s*