2015-11-15 3 views
0

Я пытаюсь проверить 4 из этих адресов. Я попробовал несколько способов, и они, похоже, не работают. Если я использую один адрес, чтобы сравнить его с, он работает, но несколько нет.Подтвердить JavaScript

function validateAddress() { 
    var address = document.forms["ipForm"]["address"].value; 
    var error = ""; 
    var ip1 = "192.168.0.0"; 
    var ip2 = "192.168.0.1"; 
    var ip3 = "192.168.0.2"; 
    var ip4 = "192.168.0.3"; 


    if (!address.match(ip1)) { 
     error += "Please enter a valid address \n"; 
    } 

    else if (!address.match(ip2)) { 
     error += "Please enter a valid address \n"; 
    } 

    else if (!address.match(ip3)) { 
     error += "Please enter a valid address \n"; 
    } 

    else if (!address.match(ip4)) { 
     error += "Please enter a valid address \n"; 
    } 
    return error; 
} 
+0

Что вы имеете в виду «несколько не»? Почему адрес должен соответствовать более чем одному ip? – Teepeemm

ответ

0

Использование IndexOf:

if (ip1.indexOf(address) === -1) { 
    error += " Please enter a valid address \n"; 
} else if (ip2.indexOf(address) === -1) { 
    error += "Please enter a valid address \n"; 
} else if (ip3.indexOf(address) === -1) { 
    error += "Please enter a valid address \n"; 
} else if (ip4.indexOf(address) === -1) { 
    error += "Please enter a valid address \n"; 
} 

Вы также можете сделать это гораздо короче, создавая массив с 4 IP-адресов, а затем вызова:

var array = ["192.168.0.0","192.168.0.1","192.168.0.2","192.168.0.3"]; 
if (array.indexOf(address) === -1) { 
    //not valid 
} 
+0

Спасибо! Это помогло – George

+0

Нет проблем. Рад, что это помогло. –

0

Похоже, хороший пример для Array.prototype.some

var address = document.forms["ipForm"]["address"].value, 
 
    error, 
 
    ips = ["192.168.0.0", "192.168.0.1", "192.168.0.2", "192.168.0.3"], 
 
    match = ips.some(function(ip) { 
 
     return address.match(ip) !== null; 
 
    }); 
 

 
if(!match){ 
 
    error = "Please enter a valid address"; 
 
    }

+0

typo: return ip ** s ** – webdeb

+0

@webdeb, по какой-то причине я думал, что есть ссылка 'ip', но кажется, что он использовал' address'. – MinusFour

+0

Извините, откуда берется 'some'? – webdeb

0

Необходимо пересмотреть свою логику. Вы всегда получите сообщение об ошибке. Скажем, наш address var является «bob». Он не соответствует ip1, поэтому условие истинно, и мы устанавливаем сообщение об ошибке. Скажем, наш адрес var - «192.168.0.0». Он соответствует ip1, поэтому условие первого оператора if будет ложным (из-за отрицания с !). Мы перейдем к условию else if и попробуем сопоставить на ip2. Совпадает ли это? Нет, поэтому условие будет истинным, и сообщение об ошибке будет установлено. Вы хотите попробовать что-то вроде

if(!address.match(ip1) && !address.match(ip2) && !address.match(ip3) && !address.match(ip4)) 
    { error += "Please enter a valid address \n"; } 

который является по существу: если адрес не соответствует IP1, 2, 3 или 4, а затем установить сообщение об ошибке.

Вы также можете изучить возможность наличия списка разрешений, хранящихся в массиве, который вы можете перебрать. Это означало бы, что вам не нужен другой оператор if или обновлять ваше условие каждый раз, когда вы добавляете новый IP-адрес в список разрешений. С каждой итерацией вы можете протестировать входной адрес по каждому элементу в вашем массиве. Если он соответствует, вы можете вернуться из функции раньше. Если он не соответствует, вы можете вернуть сообщение об ошибке после завершения цикла.

1

Не нужно match вообще, если вы не проверяете подлинность regEx. Если есть только набор допустимых параметров, то просто испытание против множества с Array.indexOf

var input = "xyz"// Some user input 
var validIps = ["192.168.0.0", "192.168.0.1", "192.168.0.2", "192.168.0.3"]; 

if (validIps.indexOf(input) == -1) { // if this is not in set indexOf returns -1 
    // error 
} 
Смежные вопросы