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

t98cgbkg  于 2023-02-14  发布在  其他
关注(0)|答案(5)|浏览(209)

这是我验证域名的代码。

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,它警告消息。我想进入子域也。如何改变这一点?我应该不会得到警告。

bpsygsoo

bpsygsoo1#

试试这个:

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

Demo

9rnv2umw

9rnv2umw2#

这是一个有点沉重的一面:

^(?:(?:(?:[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]

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

nlejzf6q

nlejzf6q3#

我建议你读读奥莱利的指南:https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch08s15.html
尝试使用https://regex101.com/验证正则表达式的结果。
8.15.验证域名问题您想要检查字符串是否看起来像是有效的、完全合格的域名,或者在较长的文本中查找此类域名。
解决方案检查字符串是否与有效域名相似:

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

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

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

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

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

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

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

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

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

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

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

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

    • 讨论**一个域名的形式为. tld域,或. tld子域,或任何数量的附加子域。
wlp8pajw

wlp8pajw4#

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

dm7nw8vv

dm7nw8vv5#

试试这个正则表达式:

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

相关问题