2012-02-10 164 views
0

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

两个错误:

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; 

这将广泛匹配无限数量的子域级别的大多数领域,提供有一个.底。

EDIT在部的前端,以禁止-

var re = /^([a-z0-9][a-z0-9-]*\.)+[a-z]{2,3}\.$/i; 
+0

+1 - 你的答案比我的完整得多 - 但你实际上设法解决所有问题*除了真正的问题! – ruakh

+0

结束时忘了那个点XD现在修好了,我相信。 –

+0

@Kolink存在一个问题,用户可以键入任意字母数字,尾部2个点或更多,验证将接受'j..','7 ...'。这是错误的。我只想接受这种格式的'agh51-.7ds - a.8jh-9a.'。我希望你能理解我。谢谢。 – sg552

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.-]+\.$/; 

+0

这里有一个问题,用户可以KEYIN任何字母数字与后2个点以上,验证将接受'j..' ,'7 ...'。这是错误的。我只想接受这种格式的'agh51-.7ds - a.8jh-9a.'。我希望你能理解我。谢谢。 – sg552

+0

@ sg552:如果您想获得当前代码的帮助,则需要发布。 (您可以[编辑您现有的问题](http://stackoverflow.com/posts/9229873/edit)。) – ruakh

+0

我感谢您的帮助。问题已解决。谢谢。 :) – sg552

1

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

\. 

匹配字符串末尾的点。

+0

有一个问题,用户可以键入任意字母数字,尾随2个点或更多,验证将接受'j..','7 ...'。这是错误的。我只想接受这种格式的'agh51-.7ds - a.8jh-9a.'。我希望你能理解我。谢谢。 – sg552

+0

我感谢您的帮助。谢谢:) – sg552

相关问题