JavaScript正则表达式验证域名?

11
如何使用 JavaScript 中的正则表达式检查有效的域名和用户名?
function validate()
{
    var patt1=new RegExp(/^[a-zA-Z0-9._-]+\\[a-zA-Z0-9.-]$/);

    var text= document.getElementById('text1').value;

    alert(patt1.test(text));
}

但对我来说不起作用。

http://net.tutsplus.com/tutorials/other/8-regular-expressions-you-should-know/ - Mr. Alien
1
什么不起作用?您想以哪种格式接受它们,为什么只有字母数字字符? - Bergi
5个回答

17
function CheckIsValidDomain(domain) { 
    var re = new RegExp(/^((?:(?:(?:\w[\.\-\+]?)*)\w)+)((?:(?:(?:\w[\.\-\+]?){0,62})\w)+)\.(\w{2,6})$/); 
    return domain.match(re);
} 

你可以试试这个,它对我有用。


这可能有效,但像@Bergi在他们的答案中指出的那样,将regexp字面量传递给RegExp构造函数会令人困惑。 - Phil
这对我有用,谢谢! - Rami
这对我有用,谢谢! - Rami

5
使用以下内容:
<script>
    function frmValidate() {
        var val = document.frmDomin.name.value;
        if (/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/.test(val)) {
            alert("Valid Domain Name");
            return true;
        } else {
            alert("Enter Valid Domain Name");
            val.name.focus();
            return false;
        }
    }
</script>

两个字母的域名怎么样? - Touchpad
@Touchpad 试试这个:/^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/ - undefined
@ZefirZdravkov 这个域名无法使用:www.2test.com - stackdave
@触摸板^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9](?:\.[a-zA-Z0-9]{2,})+$ - undefined
不考虑斜杠和破折号的情况。 - Touchpad

5
不要混淆 RegExp 构造函数正则表达式字面量。请使用其中之一。
/^[a-zA-Z0-9._-]+\\[a-zA-Z0-9.-]$/

或者

new RegExp("^[a-zA-Z0-9._-]+\\\\[a-zA-Z0-9.-]$");

顺便说一下,我不确定反斜杠在这里的作用。你想匹配一个点吗?在文字中使用\.,在字符串中使用\\.


1

请查看:http://shauninman.com/archive/2006/05/08/validating_domain_names

/^([a-z0-9]([-a-z0-9]*[a-z0-9])?\\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw])$/i

两个字母的域名? - Touchpad

-1

这段代码也支持子域名:

^(([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]|[a-zA-Z0-9])\.)*[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$

晚到派对了,但是google.co.uk或hm.com怎么样? - Touchpad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接