名称服务器末尾只需要一个点

时间:2012-02-10 15:10:05

标签: 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>

3 个答案:

答案 0 :(得分:3)

有两个问题:

if(re.test(val && val2)) {  
    alert("valid format"); 
} 
if(!re.test(val && val2)) { 
    alert("invalid format"); 
} 

首先,你有没有听说过else?这是特别的,所以你不必在否定中重复测试。

其次,您正在尝试&&两个字符串,然后将结果布尔值传递给re.test()。由于布尔值转换为字符串"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;

答案 1 :(得分:2)

听起来你只是说这个:

    var re = /^[a-zA-Z0-9][a-zA-Z0-9.-]+[a-zA-Z0-9]$/;

需要这样:

    var re = /^[a-zA-Z0-9][a-zA-Z0-9.-]+\.$/;

答案 2 :(得分:1)

如果要匹配正则表达式中的特殊字符(也称为“元字符”),则需要使用反斜杠对其进行转义。所以,就在你的正则表达式中的$之前,包括

\.

匹配字符串末尾的点。