正则表达式,用于匹配两个 IP 地址,其之间带有连字符符号



我已经使用以下正则表达式尝试过,但不符合我的要求。谁能帮我请....必须与以下示例格式的 IP 地址匹配示例 - 111.222.222.111- 222.112.1.2(假设)或单个 IP 地址。这是我的正则表达式:

(^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)$) | ^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*))(\-)^(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)$")

您可能需要考虑不使用正则表达式。这是一个更容易、更易读的问题,可以用 split 来解决:

var ips = '111.222.222.111-222.112.1.2';
ips = ips.split('-');
var ip1 = ips[0].split('.');
var ip2 = ips[1].split('.');
// ip1 is the array ["111", "222", "222", "111"]
// ip2 is the array ["222", "112", "1", "2"]

要验证它们,您只需要确保生成的数组中有四个元素,并解析每个元素并检查它是否介于 0255 之间,如下所示(对于 ip1):

var i, temp;
if(ip1.length != 4){
    console.log("Invalid IP");
}
for(i = 0; i < 4; i++){
    temp = parseInt(ip1[i], 10);
    if(0 > temp || temp > 255){
        console.log("Invalid IP");
        break;
    }
}

对两个 IP 执行此操作,并确保 ips 中只有 2 个 IP ( ips.length == 2 )。

相关内容

最新更新