我有一个带字段的表单。他们需要输入的格式如下。 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;
}
}
答案 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*
。