2016-07-28 10 views
3

Я пытаюсь найти регулярное выражение для проверки IP-адресов и один для имен хостов в Javascript.Регулярное выражение для имени хоста и ip

Я смотрел много сообщений здесь и в других местах, но не могу найти то, что соответствует моим потребностям.

Для IP я нашел два, которые прекрасно работают (не знаю, если есть и другие различия, чем формат):

1: (это мой предпочтительный регулярное выражение для 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]?)$ 

2:

^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ 

Для Hostname я нашел это:

/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/ 

который также отлично работает.

НО ^^ проблема в том, что имя хоста регулярное выражение будет проверять

192.168.178.1111 

Это не имя хоста, это неверный IP-адрес.

Я хотел бы подгонять оба имени хоста & IP regex вместе в одном регулярном выражении, но так как регулярное выражение хоста будет проверять любой недействительный IP-адрес, я не могу их объединить.

Кто-нибудь есть идея о том, как создать регулярное выражение хоста, которое не будет проверять неверный IP-адрес?

EDIT: Я нашел это так же: http://jsfiddle.net/opd1v7au/2/

, но это будет проверять, например:

::2:3:4:5 

который мое приложение не может принять.


Решение: ТНХ к Aaron У меня есть это регулярное выражение для в настоящее время, который, кажется, работает (в тестировании на данный момент)

^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$ 

Комбинированный вариант для проверки IP-адреса & Хосты ->RegExr.com:

^(?:(?: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]?)$|^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$ 
+0

Возможный дубликат [Как проверить проверку IP-адреса в JQuery] (HTTP://stackoverflow.com/questions/17587994/how-to-check-validation-of-ip-address-in-jquery) –

+0

См. это http://stackoverflow.com/questions/106179/regular-expression-to-match- dns-hostname-or-ip-address –

+0

они работают только для IP-адресов, у которых у меня уже есть 2 рабочих или неправильно работают с именами хостов. Что-то вроде IP-Regex показано как действительное, что неверно. И вы не можете комбинировать IP & Hostname вместе для правильной работы – Alkahna

ответ

2

на основе this SU answer, я предлагаю эту модификацию, которая принимает метки, начинающиеся с цифр для домена верхнего уровня, за исключением:

/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$/ 
+0

он работает для некоторых имен хостов, но он также будет проверять что-то вроде 'IP-REGEX' или' Sample' – Alkahna

+0

. Каковы допустимые имена хостов, в соответствии с rfc1035, как и 'localhost'; какая у вас проблема с ними? – Aaron

+0

Возможно, вы хотите, чтобы они закончили с 2-3 буквами TLD? – Aaron

-3

Некоторые люди , столкнувшись с проблемой, подумайте: «Я знаю, я буду использовать регулярные выражения». Теперь у них есть две проблемы.

Как однажды сказал Джеффри Фридл, вместо одного комплекса используются два простых разных регулярных выражения.

+0

, но если я возьму этот IP: '192.168.111.123456', то IP-Regex скажет его недействительным. Если я затем проверю с помощью Hostname-Regex, он скажет, что он действителен. Возникает проблема. Теперь у меня есть две регулярные проверки с разными результатами. Но '192.168.111.123456' не является ни действительным IP, ни допустимым именем хоста. Кроме того, строка: IP-REGEX является допустимым именем хоста, которое также неверно. – Alkahna

+0

В Alkahna на самом деле используются два разных регулярных выражения и имеет проблемы со вторым. – enkryptor

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

  • Нет связанных вопросов^_^