我有一个输入字段,用户可以在其中编写他们希望搜索的域名。
我的域名搜索仅支持搜索:“something.com”或“something”
它只支持.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");
}
});
});
});
答案 0 :(得分:3)
使用如下所示的模式。为了构建这种模式,我使用了以下规则:
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
}
答案 1 :(得分: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");
}
});
});
});
答案 2 :(得分:0)
if( !doma.match(/^[a-z0-9_-]+(\.(com|net|org))?$/i)) { /* error stuff here */
else $.ajax(...);
我想,通过你给出的有效输入的例子,可以想象这样的东西。
您还可以将部分放在/.../
元素的pattern
属性中的input
之间,支持的浏览器会在允许提交之前与之匹配。