2014-01-11 3 views
3

У меня есть вопрос, как проверить IP: Порт вместе. пример:JS Проверка IP: Порт

192.158.2.10:80 < --Valid

192.158.2.10 < --- Invalid

Так что порт должен, я нашел несколько IP проверки (Regex), но быть combind with port не повезло. Я не хочу использовать отдельное поле ввода для порта.

Моя идея в том, чтобы выглядеть примерно так:

var str = '192.168.10.2:80'; 
var substr = ':'; 
    if (str.indexOf(substr) !== -1){ 
     var pieces = str.split(':', 2); 
     var ip = pieces[0]; 
     var port = pieces[1]; 
     //and here validate ip and port 
    }else{ 
     console.log('the char '+substr+' is not there'); 
    } 

Является ли это правильный путь? или там проще?

+0

Порт всегда 80 или хотите какие-либо порты? – YOU

+0

любой порт от 1 до 65535 – Froxz

ответ

8

Регулярное выражение должно было бы быть смешно долго для того, чтобы подтвердить, что числа находятся в пределах допустимого диапазона. Вместо этого я хотел бы использовать это:

function validateIpAndPort(input) { 
    var parts = input.split(":"); 
    var ip = parts[0].split("."); 
    var port = parts[1]; 
    return validateNum(port, 1, 65535) && 
     ip.length == 4 && 
     ip.every(function (segment) { 
      return validateNum(segment, 0, 255); 
     }); 
} 

function validateNum(input, min, max) { 
    var num = +input; 
    return num >= min && num <= max && input === num.toString(); 
} 

Demo jsfiddle.net/eH2e5

+0

Это то, что я искал. – Froxz

0

Я думаю '[0-9]+.[0-9]+.[0-9]+.[0-9]+:[0-9]+' может работать, а

Вы можете проверить его на http://regex101.com/

+0

Он работал, но если вход будет 234234235235.234234234.234234.234234: 234234234, он по-прежнему отображается. мы можем сделать максимум 3 символа после каждого "." – Froxz

+0

http://stackoverflow.com/questions/106179/regular-expression-to-match-hostname-or-ip-address вы должны принять это –

0

Возможно, это могло бы работать. Это было в моих предварительных испытаний

var id = '192.158.2.10:80'; // passes - true 
// var id = '192.158.2.10'; // fails - false 

/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}\:[0-9]{1,3}$/.test(id); 
+0

Он работал только с изменением диапазона портов от 1-3 до 1-5 символов. '/^(?: [0-9] {1,3} \.) {3} [0-9] {1,3} \: [0-9] {1,5} $ /' Ofcourse больше проверки будет на стороне сервера, это просто, чтобы показать пользователю, что вход недействителен. – Froxz

+2

999.999.999.999:08 пройдет слишком. но, это зависит от того, насколько вы точны. – YOU

0

Этот метод explained here использует регулярное выражение, которое является более полным:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
 
function ValidateIPaddress(ipaddress) 
 
    { 
 
    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(myForm.emailAddr.value)) 
 
     { 
 
     return (true) 
 
     } 
 
    alert("You have entered an invalid IP address!") 
 
    return (false) 
 
    } 
 
</script>

1

вы можете просто использовать это Regex для проверки IP: Порт только

/^ (? :(?: 25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?).) { 3} (?: 25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9]?): [0-9] {1,5 } $/

Смежные вопросы