下面的正则表达式工作得很好,除了名称服务器末尾只需要一个点 (.)。例如,如果用户提交 ns1.hello.com
将会出现错误。接受的格式是末尾带有点,如下 ns1.hello.com.
请帮助我。谢谢。
<script type="text/javascript">
function validSubdomain() {
var re = /^[a-zA-Z0-9][a-zA-Z0-9.-]+\.$/;
var val = document.getElementById("nameserver").value;
var val2 = document.getElementById("nameserver2").value;
if(val == '' && val2 == ''){
alert("Please fill in the name server");
document.forms['namaform'].elements['nameserver'].focus();
return false;
}
if(val == ''){
alert("Please fill in the name server 1");
document.forms['namaform'].elements['nameserver'].focus();
return false;
}
if(val2 == ''){
alert("Please fill in the name server 2");
document.forms['namaform'].elements['nameserver2'].focus();
return false;
}
var parts = val.split('.');
var parts2 = val2.split('.');
if (parts.length < 3)
{ alert('invalid nameserver format')
document.forms['namaform'].elements['nameserver'].focus();
return false;
}
else if (parts2.length < 3)
{ alert('invalid nameserver 2 format')
document.forms['namaform'].elements['nameserver2'].focus();
return false;
}
if( !re.test(val)) {
alert("invalid nameserver 1 format");
return false;
}
else if( !re.test(val2)) {
alert("invalid nameserver 2 format");
}
else{namaform.submit();}
}
</script>
最佳答案
有两个问题:
if(re.test(val && val2)) {
alert("valid format");
}
if(!re.test(val && val2)) {
alert("invalid format");
}
首先,您从未听说过else
吗?它是专门存在的,因此您不必重复进行阴性测试。
其次,您尝试将两个字符串&&
组合在一起,然后将生成的 bool 值传递给re.test()
。由于 bool 值会转换为字符串 "true"
或 "false"
它永远不会匹配。
更改为:
if( re.test(val) && re.test(val2)) {
alert("valid format");
}
else {
alert("invalid format");
}
另请注意,您的正则表达式是错误的。它会接受 a..b
作为输入,这显然是无效的。试试这个:
var re = /^([a-z0-9-]+\.)+[a-z]{2,3}\.$/i;
这将广泛匹配大多数具有无限数量子域级别的域,前提是末尾有一个 .
。
编辑以禁止在部分前面使用-
:
var re = /^([a-z0-9][a-z0-9-]*\.)+[a-z]{2,3}\.$/i;
关于javascript - 名称服务器末尾仅需要一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9229873/