Jquery如何validation域名

我有一个输入字段,用户可以在其中编写他们希望搜索的域名。

我的域名搜索仅支持搜索:“something.com”或“something”

它只支持.com, .net, .org

我想要做的是在进行ajax调用之前validation用户输入,并在出现任何错误时显示错误消息。 用户输入的示例:“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('

Please wait...

'); $.ajax({ type: 'POST', url: 'http://localhost:3000/domain', data: { domain: doma }, success: function(msg){ $('#contentajax').html(msg); $('#contentajax').css("border", "none"); } }); }); });

使用正则表达式检查域是否有效。 这样的正则表达式可能是:

 /^(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('

Please wait...

'); $.ajax({ type: 'POST', url: 'http://localhost:3000/domain', data: { domain: doma }, success: function(msg){ $('#contentajax').html(msg); $('#contentajax').css("border", "none"); } }); }); });

使用如下所示的模式。 为了构造这种模式,我使用了以下规则:

  • 域不得包含协议
  • 只有字母数字字符和超量是有效的域名
  • 允许子域名
  • 顶级域名必须是以下任一项: 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 } 
 if( !doma.match(/^[a-z0-9_-]+(\.(com|net|org))?$/i)) { /* error stuff here */ else $.ajax(...); 

我想,通过你给出的有效输入的例子,我会想象这样的事情。

您还可以将部分放在input元素的pattern属性中的/.../之间,并且支持的浏览器在允许提交之前将匹配它。