2012-02-10 150 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

相關問題