域名服务器验证
问题描述:
下面的代码有点儿工作除了yes.com
被示为valid
而我需要只接受这种格式ns1.yes.com
,www.yes.com
,接受号码和在前面或在域名服务器的最后没有破折号或点。请帮帮我。域名服务器验证
<html>
<head>
<title>Validate name server</title>
<script type="text/javascript">
function validSubdomain() {
var re = /^[a-zA-Z0-9][a-zA-Z0-9.-]+[a-zA-Z0-9]$/;
var val = document.getElementById("nameserver").value;
if(val == ''){
alert("Please enter the name server");
return false;
}
if(re.test(val)) {
alert("valid format");
}
if(!re.test(val)) {
alert("invalid format");
}
}
</script>
</head>
<body>
Insert nameserver : <input name="txt_domain" id="nameserver" type="text" size="30" /> <input name="btn_validate" type="button" value="Validate" onclick="validSubdomain()" />
</body>
</html>
答
通过分割点的值,并计算所产生的部分。
var parts = val.split('.');
if (parts.length < 3) { alert('invalid') }
答
您需要对需要匹配的模式更清楚一点。我假设你想要3个由两个点分开的字母数字“单词”。
此正则表达式将匹配你想要什么:
var re = /[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2}/
如果你想匹配至少 3个部分在主机,例如“foo.bar.example.com”或“www.example.co.uk”,只需修改量词在末端是开放式的:
var re = /[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2,}/
+0
对于不清楚我的问题,我表示歉意。对不起,浪费你的时间。我感谢您的帮助。 – sg552 2012-02-10 11:59:25
答
从你的问题看来你忘了可能性双(或更多)破折号。 现在我知道有ccTLD在连续接受多个破折号,但通常这是“禁止的”。
你没有对主机的部分进行任何验证。例如,这将匹配“@。@。@”如果多于3,它也会匹配。 – Asmor 2012-02-09 20:06:04
他已经有了验证。我不确定他是否想要3或至少3。 – 2012-02-09 20:07:51
是的非常感谢。你正确理解我。其作品。再次感谢。 – sg552 2012-02-10 11:58:03