Jquery如何验证域名

时间:2011-10-27 13:14:16

标签: javascript jquery

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

我的域名搜索仅支持搜索:“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");
            }
        });        
    });
});

3 个答案:

答案 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之间,支持的浏览器会在允许提交之前与之匹配。