[英]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.33
和192.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.