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
属性中的/.../
之间,并且支持的浏览器在允许提交之前将匹配它。