获取特定字符之间的替换

时间:2019-05-15 19:00:08

标签: javascript

我正在尝试解决一些JS问题。我想检查一个IP地址是否有效。 因此数字必须在0-255之间。

因此,我现在想要做的是获取一个IP 192.168.1.1,并获取子字符串并将其加载到数组中,所以我想创建一个看起来像这样的数组:

array = ['192' , '168' , '1' , '1'];

我在算法中尝试了各种方法,但是无法动态定位数字并在每个点之间进行分割。

我已经尝试了几次,那就是我能得到的最接近的

let str = '192.168.1.1';

isValidIp(str);

function isValidIP(str) {
let array = [];
let substringArray = [];
for (let i=0; i<str.length; i++){

if (str[i] == '.') array.push(i);

}

let counter = 0;
for (let i in array){
substringArray.push(str.substring(counter, array[i]));
counter = array[i];
}
console.log(substringArray);
}


哪个返回:

[ '192', '.168', '.1' ]

4 个答案:

答案 0 :(得分:1)

您可以使用JavaScript的split()函数,该函数返回由指定数字分隔的每个元素的数组。或者,我不建议您使用RegEx。这是两个示例:

function isValidIPwRegEx(str){
 if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(str))
  {
    return true;
  }
return false;
}

function isValidIP(str) {
    let array = str.split("."),
        isIP = true;
    array = array.filter( block => !block.includes("+") && !block.includes("e") );
    if(array.length!=4) return false;
    array.forEach((number) => {
        if ( !(+number >=0 && +number <= 255) ) { //As @p.s.w.g kindly suggested
            isIP = false;
        }
    });
    return isIP;
}

//With RegEx
console.log("With RegEx");
console.log(isValidIPwRegEx("192.168.1.1"));
console.log(isValidIPwRegEx("blah.blah.blah.blah")); //As @georg suggested
console.log(isValidIPwRegEx("1e1.2e1.+3e1.+5e1")); //As @georg again suggested to @Nina Scholz
console.log("");
//Without RegEx
console.log("Without RegEx");
console.log(isValidIP("192.168.1.1"));
console.log(isValidIP("blah.blah.blah.blah")); //As @georg suggested
console.log(isValidIP("1e1.2e1.+3e1.+5e1")); //As @georg again suggested to @Nina Scholz
console.log(isValidIP("1e1.2e1.3e1.5e1"));

答案 1 :(得分:0)

使用String的split函数。

所以,类似"192.168.1.1".split(".")

答案 2 :(得分:0)

您可以分割字符串并检查长度是否为4,并且所有值都是整数并且小于[{'selection_id': 1099, 'value_dict': [{'value': '11', 'value_name': 'a'}, {'value': '78', 'value_name': 'p'}, {'value': '13', 'value_name': 'y'}]}, {'selection_id': 1097, 'value_dict': [{'value': '39', 'value_name': 'b'}, {'value': '52', 'value_name': 'f'}]}, {'selection_id': 1098, 'value_dict': [{'value': '98', 'value_name': 'd'}, {'value': '4', 'value_name': 'r'}]}]

256

答案 3 :(得分:0)

(0|[1-9]\d{0:2})

如果您希望更加精确,可以对每个数字进行校验:

for (i = 4; i < table -1; i++){
    let value = document.querySelector("[name='main']")
.contentWindow.document.getElementById("music").rows[i].cells[1].innerHTML;

    if (numbers.includes(value))
    {
    document.querySelector("[name='main']")
.contentWindow.document.getElementById("music")
.rows[i].cells[1].style.backgroundColor = "yellow";
    };

这可以防止多余的前导0。