2012-02-09 100 views
0

下面的代碼有點兒工作除了yes.com被示爲valid而我需要只接受這種格式ns1.yes.comwww.yes.com,接受號碼和在前面或在域名服務器的最後沒有破折號或點。請幫幫我。域名服務器驗證

<html> 
<head> 
<title>Validate name server</title> 
<script type="text/javascript"> 

    function validSubdomain() { 
     var re = /^[a-zA-Z0-9][a-zA-Z0-9.-]+[a-zA-Z0-9]$/; 
     var val = document.getElementById("nameserver").value; 

    if(val == ''){ 
     alert("Please enter the name server"); 
     return false; 
    } 
     if(re.test(val)) { 
      alert("valid format"); 
     } 

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

    } 
    </script>   
    </head> 

    <body> 
    Insert nameserver : <input name="txt_domain" id="nameserver" type="text" size="30" /> <input name="btn_validate" type="button" value="Validate" onclick="validSubdomain()" /> 
    </body> 
    </html> 

演示頁:http://khamis.cheapantivirus.me/

回答

1

通過分割點的值,並計算所產生的部分。

var parts = val.split('.'); 
if (parts.length < 3) { alert('invalid') } 
+0

你沒有對主機的部分進行任何驗證。例如,這將匹配「@。@。@」如果多於3,它也會匹配。 – Asmor 2012-02-09 20:06:04

+0

他已經有了驗證。我不確定他是否想要3或至少3。 – 2012-02-09 20:07:51

+0

是的非常感謝。你正確理解我。其作品。再次感謝。 – sg552 2012-02-10 11:58:03

0

您需要對需要匹配的模式更清楚一點。我假設你想要3個由兩個點分開的字母數字「單詞」。

此正則表達式將匹配你想要什麼:

var re = /[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2}/ 

如果你想匹配至少 3個部分在主機,例如「foo.bar.example.com」或「www.example.co.uk」,只需修改量詞在末端是開放式的:

var re = /[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2,}/ 
+0

對於不清楚我的問題,我表示歉意。對不起,浪費你的時間。我感謝您的幫助。 – sg552 2012-02-10 11:59:25

0

從你的問題看來你忘了可能性雙(或更多)破折號。 現在我知道有ccTLD在連續接受多個破折號,但通常這是「禁止的」。