2011-10-27 57 views
3

我有一個輸入字段,用戶可以在其中輸入他們希望搜索的域名。Jquery如何驗證域名

我的域名搜索只支持搜索爲:「something.com」或「東西」

而且只支持.com, .net, .org

,我想要做的是驗證用戶輸入時的Ajax調用之前並在出現任何錯誤時顯示錯誤消息。例如,如果用戶的類型: 「asdasdasd.asdasd」 或 「wwwasd.asdasd」 或 「www.asdasd.dk」

#domainsearch is the input field 

#domanerknap is the search button 

這是我的Jquery:

$(document).ready(function() { 
    $('#domanerknap').click(function(e) { 
     var doma = $('#domainsearch').val(); 
     $('#contentajax').empty() 
         .css("border", "1px solid #CCCCCC") 
         .html('<p class="vent">Please wait...</p><p class="venter"><img src="../images/ajax.gif" /></p>'); 
     $.ajax({ 
      type: 'POST', 
      url: 'http://localhost:3000/domain', 
      data: { 
       domain: doma 
      }, 
      success: function(msg){ 
       $('#contentajax').html(msg); 
       $('#contentajax').css("border", "none"); 
      } 
     });   
    }); 
}); 

回答

1

使用正則表達式來檢查域是否有效。這樣的正則表達式可能是:

/^(http(s)?\/\/:)?(www\.)?[a-zA-Z\-]{3,}(\.(com|net|org))?$/ 

然後您發送AJAX調用之前,請檢查輸入的正則表達式匹配:

$(document).ready(function() { 
    $('#domanerknap').click(function(e) { 
     var doma = $('#domainsearch').val(); 
     if(!/^(http(s)?\/\/:)?(www\.)?[a-zA-Z\-]{3,}(\.(com|net|org))?$/.test(doma)) 
      { 
       alert('invalid domain name'); 
       return false; 
      } 
     $('#contentajax').empty() 
         .css("border", "1px solid #CCCCCC") 
         .html('<p class="vent">Please wait...</p><p class="venter"><img src="../images/ajax.gif" /></p>'); 
     $.ajax({ 
      type: 'POST', 
      url: 'http://localhost:3000/domain', 
      data: { 
       domain: doma 
      }, 
      success: function(msg){ 
       $('#contentajax').html(msg); 
       $('#contentajax').css("border", "none"); 
      } 
     });   
    }); 
}); 
+0

它提交「asdasdasd」時,它說「無效的域名」,它應該允許如何改變? –

+0

請參閱更新。 sry,我錯過了你希望能夠排除域擴展的事實 –

+0

如果var doma是「testsome.oaa」,如何提升和出錯示例,那麼錯誤將是「.ooa不被支持或無效」,如果var doma是「www.adsasd」它會引發錯誤無效的域名「http://www.adsasd」 –

3

使用圖案,如下所示。爲了構建這種模式中,我使用以下規則:

  • 域必須不包含協議
  • 只有字母數字字符和hypens是有效的域名
  • 子域可以
  • 頂級域名必須是以下任一種:com net org

我還包含了動態匹配,以便在輸入時自動省略協議和路徑。

var domainPattern = /^(https?:\/\/)?((?:[a-z0-9-]+\.)+(?:com|net|org))(?:\/|$)/i 
if(doma.match(domainPattern)){ 
    doma = doma[1]; //Get the domain parth 
    $.ajax(...); //Valid 
} 
+0

如何禁用子域?或者使它們不被接受_ –

+0

@Railsbeginner如果你想選擇根域,使用'/([a-z0-9-]+\.(?:com|net|org))(?:\/|$ )/ i'。這種模式會嘗試從給定的字符串中選擇一個匹配的url,例如「我的站點是example.com/mysite」 - >'example.com'。 –

+0

您應該可以跳過括號內的'-'號 –

0
if(!doma.match(/^[a-z0-9_-]+(\.(com|net|org))?$/i)) { /* error stuff here */ 
else $.ajax(...); 

類似的東西,我會想象,在你給有效輸入的例子去。

您還可以將/.../之間的部分放在input元素的pattern屬性中,支持的瀏覽器在甚至允許提交之前也會匹配它。

+0

它在域名的開頭接受'dash',例如:'-new.com'這顯然是錯誤的...... – behz4d