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 -有效域name(expected)192.15.67.34 -有效的ipv4 address(expected)192.45.dd.33预期:无效知识产权
实际:有效域名,因为当前系统在传递域名约束时会对其进行验证。
192.67.77.xx预期:无效知识产权
实际:有效域名,因为当前系统在传递域名约束时会对其进行验证。
请提出一些有价值的意见。
发布于 2021-04-29 07:23:04
据我所知,域名可以是由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));
}
https://stackoverflow.com/questions/67312533
复制相似问题