0

我已经尝试使用以下正则表达式,但无法满足我的要求。任何人都可以帮助我......必须匹配以下示例格式的 IP 地址 Example- 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])|\\*)$")
4

1 回答 1

2

您可能要考虑不使用正则表达式。这是一个用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"]

要验证它们,您只需要确保结果数组中有四个元素,并 parseInt 每个元素并检查它是否介于两者之间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 ( ips.length == 2) 中只有 2 个 IP。

于 2012-12-05T19:46:53.363 回答