繁体   English   中英

验证 IPv4 地址和域名的正则表达式

[英]Regex that validates both IPv4 address and domain name

if (isValidDomainName(addr)) {
     return true;
}
else if (isValidIPv4(addr)) {
     return true;
}

function isValidIPv4(addr){
    var regex = /^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])$/;
    return regex.test(addr);
}

function isValidDomainName(name){
   var regex =/^((www\.([a-zA-Z0-9\-]{2,63}\.)+[a-zA-Z]{2,63})|(([a-zA-Z0-9\-]{2,63}\.)+[a-zA-Z]{2,63}))(\.[a-zA-Z]{2,63})?$/;
   return regex.test(name);
}

这是我写的代码。 我面临一些问题。 让我举几个例子:

  • google.com - 有效域名(预期)

  • 192.15.67.34 - 有效的 ipv4 地址(预期)

  • 192.45.dd.33

    预期:无效 ip

    ACTUAL:有效域名,因为当前系统在通过域名约束时对其进行验证

  • 192.67.77.xx

    预期:无效 ip

    ACTUAL:有效域名,因为当前系统在通过域名约束时对其进行验证

请提出一些有价值的意见。

据我所知,域名可以是由 ASCII 字母、数字和符号-组合而成的任何“块”序列,块之间用. . 它最多可以有 255 个字符,并且必须以主域名结尾。

鉴于主域可以是任何被定义为块的东西,根据这个定义, 192.45.dd.33192.67.77.xx有效的域名。

为什么不将您的输入验证为 IP 地址,然后仅在它未被识别为有效的 IP 时将其验证为域?

 function isValid(addr) { if (isValidIPv4(addr)) { return true; } else if (isValidDomainName(addr)) { return true; } return false; } function isValidIPv4(addr){ var regex = /^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])$/; return regex.test(addr); } function isValidDomainName(name){ var regex =/^((www\.([a-zA-Z0-9\-]{2,63}\.)+[a-zA-Z]{2,63})|(([a-zA-Z0-9\-]{2,63}\.)+[a-zA-Z]{2,63}))(\.[a-zA-Z]{2,63})?$/; return regex.test(name); } for (addr of [ '192.168.1.52','192.168.1.xx', '192.ww.1.0', '255.255.255.000', 'my-domain.com', 'my$IPp.com', 'google.192' ]) { console.log(addr, isValidIPv4(addr), isValidDomainName(addr), isValid(addr)); }

暂无
暂无

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

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