2012-01-11 4 views
0

У меня есть этот шаблон, хранящийся в переменной:RegEx Javascript - Что я делаю неправильно?

var regexServer = /^([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\:[0-9]{2,4}$/; 

if(!stringFromArgument.match(regexServer)) 
    alert("You must input a valid IP and a Port address! Eg: 66.77.88.99:8000"); 

Я проверил строку, идущий от входа (формы), и это нормально.

Если кто-то хочет добавить свой собственный IP-адрес и адрес порта, он должен добавить действительную форму. Его строка должна содержать только ., :, цифры и пробелы.

Что я делаю неправильно?

+1

Зависит. Что происходит? –

+1

Просьба указать пример ввода, который вы используете, который не работает –

+2

Обратите внимание, что только одна цифра совершенно нормальна в IP-адресе, например. '66.77.88.1'. Ваши предложения '{2,3}' слишком строгие. –

ответ

0

Во-первых, не нужно ставить (…)+, если вы просто тестируете. Также вы ограничены 3-го и 4-го числа до 2+, но не может быть ниже, чем число 10, а также порт может быть больше, чем 9999.

var regexServer = /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{2,4}$/ 

Кроме того, это регулярное выражение проверяет только если правильный формат, но не проверяет ip (проверяет, находится ли число между 0-255). Вот еще несколько регулярных выражений (без проверки порта, вы можете добавить его сами):

var regexServer = /^(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9])[.]){3}(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9]))$/ 
1

В чем проблема?

Я вижу две вещи

/^([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\:[0-9]{2,4}$/ 
      ^   ^   ^   ^
                  ^
  • Кванторы в моем первом ряду маркеров неверны.
  • Выделение, отмеченное во второй строке, не требуется, так как «:» не является особым символом.
+0

Спасибо за ответ! Я полностью смущен ... Я начал все с самого начала, и я пробовал это: var regexServer =/^ [0-9] \. [0-9] \. [0-9] \. [0-9]: [0-9] $ /; Я только хочу, чтобы правильно IP и порт адресат как этот: 88.77.66.55:8000 Извините за мой английский, но я взял стрелу в колене ... –

1

Вы принимаете IP-адреса от 10 до 255, возможно, вы должны изменить квантификаторы от {2,3} до {1,3}, иначе IP-адреса, такие как 128.0.0.1:80, будут отклонены.

1

Я думаю, что ваш RegExp не работает, потому что символы +.

Это должно работать и на мой взгляд, более эффективное регулярное выражение: /^([0-9]{1,3}(\.?)){4}:[0-9]{2,5}$/

Вы должны позволить 1 номер для каждого уровня. Например: 82.176.103.6 не совпадет, если вы этого не сделали. Кроме того, количество номеров для портов должно быть 5, потому что самый старший номер порта: 65535

+1

+1, но '^ ((\ d {1,3}) [\.]] {4} \ d {2,5} $ 'может быть лучше, потому что текущее регулярное выражение также соответствует' 66.778899: 8000' – noob

+0

@micha очень хорошая точка, +1!Тем не менее, ваш запрос соответствовал бы «11: 22: 33: 44»;) –

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