javascript - 名称服务器末尾仅需要一个点

标签 javascript regex validation

下面的正则表达式工作得很好,除了名称服务器末尾只需要一个点 (.)。例如,如果用户提交 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/

相关文章:

javascript - RxJS:使用 Observable.create 时如何知道需要清理哪些内容

c# - 如何编写正则表达式以在 C# 中使用正则表达式从字符串中获取子字符串?

javascript - 在动态生成的表单中插入 JavaScript 验证

javascript - 使用 Javascript 提取给定格式的数据

javascript - NVelocity 高级循环语法

javascript 未在 imgsrc 中显示图像

javascript - 如何在 jQuery 中为关键字解析文本?

jquery - 如何使用正则表达式删除字符串中的字母、破折号和美元符号?

java - 在 Java 中根据 XSD 1.1 验证 XML 时出错

forms - 未调用 Angular2 自定义验证器