繁体   English   中英

如何使用正则表达式验证域名?

[英]How to validate domain name using regex?

这是我验证域名的代码。

function frmValidate() {
    var val = document.frmDomin;
    if (/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/.test(val.name.value)) {
    }
    else {
        alert("Enter Valid Domain Name");
        val.name.focus();
        return false;
    }
}

<form name="frmDomin" action="" method="post" onsubmit="return frmValidate();">
Domain Name : <input type="text" value="" id="name" name="name"  />
</form>

现在我输入了http://devp1.tech.in并提醒消息。 我也想进入子域。 如何改变这个? 我不应该警觉。

尝试这个:

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

演示

这有点沉重:

^(?:(?:(?:[a-zA-z\-]+)\:\/{1,3})?(?:[a-zA-Z0-9])(?:[a-zA-Z0-9\-\.]){1,61}(?:\.[a-zA-Z]{2,})+|\[(?:(?:(?:[a-fA-F0-9]){1,4})(?::(?:[a-fA-F0-9]){1,4}){7}|::1|::)\]|(?:(?:[0-9]{1,3})(?:\.[0-9]{1,3}){3}))(?:\:[0-9]{1,5})?$

将匹配:

  • google.com
  • db.my-website.co.us
  • ftp://container-617.databases.online
  • many-ports.com:7777

注意:不会匹配localhost

IPv4

  • 192.168.3.1
  • 127.0.0.1:3306

IPv6(部分支持)

  • [2001:0db8:85a3:0000:0000:8a2e:0370:7334]
  • [2001:db8:85a3:0:0:8a2e:370:7334] (与之前相同)
  • [da7a:ba5e:da7a:ba5e:da7a:ba5e:da7a:ba5e]:3306
  • [::1] (本地主机环回)
  • [::] (未指定地址)

但不是(IPv6)

  • [ 2001:db8:85a3::8a2e:370:7334]

此正则表达式不支持将连续的 0 段折叠为 IPv6 地址中的“::”。 (阅读:不要在 IPv6 地址上尝试此操作)

我建议阅读 O'Reilly 的指南: https : //www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch08s15.html

尝试使用https://regex101.com/来验证正则表达式的结果。

8.15. 验证域名问题您想检查一个字符串是否看起来像是一个有效的、完全限定的域名,或者在更长的文本中找到这样的域名。

解决方案检查字符串是否看起来像一个有效的域名:

 ^([a-z0-9]+(-[a-z0-9]+)*\\.)+[az]{2,}$

正则表达式选项:不区分大小写的正则表达式风格:.NET、Java、JavaScript、PCRE、Perl、Python

 \\A([a-z0-9]+(-[a-z0-9]+)*\\.)+[az]{2,}\\Z

正则表达式选项:不区分大小写的正则表达式风格:.NET、Java、PCRE、Perl、Python、Ruby 在较长的文本中查找有效域名:

 \\b([a-z0-9]+(-[a-z0-9]+)*\\.)+[az]{2,}\\b

正则表达式选项:不区分大小写正则表达式风格:.NET、Java、JavaScript、PCRE、Perl、Python、Ruby 检查域的每个部分是否不超过 63 个字符:

 \\b((?=[a-z0-9-]{1,63}\\.)[a-z0-9]+(-[a-z0-9]+)*\\.)+[az]{2,63}\\b

正则表达式选项:不区分大小写的正则表达式风格:.NET、Java、JavaScript、PCRE、Perl、Python、Ruby 允许使用 punycode 表示法的国际化域名:

 \\b((xn--)?[a-z0-9]+(-[a-z0-9]+)*\\.)+[az]{2,}\\b

正则表达式选项:不区分大小写正则表达式风格:.NET、Java、JavaScript、PCRE、Perl、Python、Ruby 检查域的每个部分是否不超过 63 个字符,并允许使用 punycode 表示法的国际化域名:

 \\b((?=[a-z0-9-]{1,63}\\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\\.)+[az]{2,63}\\b

正则表达式选项:不区分大小写的正则表达式风格:.NET、Java、JavaScript、PCRE、Perl、Python、Ruby

讨论域名具有 domain.tld 或 subdomain.domain.tld 或任意数量的附加子域的形式。 ...

试试这个正则表达式:

/([a-z0-9]+\.)*[a-z0-9]+\.[a-z]+/

您编写的正则表达式仅在一个点后验证...因此编写正则表达式,通过再放置一个点和类似正则表达式来放置相似的正则表达式来修改它。...我知道这个答案很模糊...同时张贴正则表达式...

<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>

注意:这不会验证 Url。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM