2017-02-11 6 views
-3

В настоящее время я пытаюсь проверить вход пользователя как действительный URL (http (s): //www.abc.at или localhost) или действительный IP-адрес (127.0.0.1, ...), используя только стандартные методы C++, такие как REGEX. Я мог бы использовать библиотеки ASIO (автономные), regex и arpa/inet.h. Есть ли способ сделать это очень просто?Проверка подлинности на C++ для действительного IP-адреса или IP

Благодарим за помощь!

+2

Есть gazillion способы сделать это, да. –

+0

Регулярное выражение не является стандартным методом C++. Попробуйте интегрировать библиотеку в свою сборку. Попробуйте использовать некоторые из кода. Если у вас возникнет конкретная проблема, вернитесь и задайте вопрос. Не забудьте найти ответ до этого. – oklas

+4

@oklas Конечно ['std :: regex'] (http://en.cppreference.com/w/cpp/regex/basic_regex) является частью стандарта. Под каким камнем вы живете? –

ответ

0

Просто используйте:

^https?:\/\/(.+\..{2,10}|localhost|(?:\d{1,3}\.){3}\d{1,3})\/?.*?$ 

Это будет соответствовать любому адресу, который начинается с https:// или http://, а затем один из следующих трех случаев:

  1. любые символы, за которым следует точка . и ДВУ с длиной от 2 до 10.
  2. localhost
  3. IP-объявление платье с 4 сегментами цифр до 3 символов (не проверяет достоверность IP-адреса, принимает 999.999.999.999.

Адрес live example.

+0

Вы просто проверяете URL-адреса и игнорируете обнаженные IP-адреса. – MSalters

+0

Возможно, это не лучшее решение, но в моем случае это было просто отлично, спасибо! – Blackbird

2

Обычно вы должны быть осторожны с тем, чтобы делать такие проверки самостоятельно, потому что они, как правило, намного сложнее, чем кажется на первый взгляд. Например, чтобы проверить IPv4, вы не можете просто проверить «4 числа, разделенные точками». Вам также придется проверять такие вещи, как диапазон каждого номера (0-255), специальные случаи, такие как 0.0.0.0 и т. Д. Тогда как насчет IPv6? URL-адреса/имена хостов не являются менее сложными.

Чтобы ответить на конкретный вопрос: Нет, нет простого способа проверить IP/имя хоста.

Либо используйте специальную библиотеку для проверки или просто попробуйте сделать то, что вы хотите сделать с адресом, и обработать ошибки соответствующим образом. Вы можете подумать о том, чтобы сделать грубую проверку здравомыслия для очевидных ошибок в начале, главным образом для предоставления пользователям более качественных сообщений об ошибках. Но даже это требует немного размышлений. Например, легко забыть о IPv6 и отклонять совершенно допустимые адреса.

+0

Точно. Вы должны использовать любой API, который вы собираетесь использовать, чтобы фактически преобразовать вход в нечто, пригодное для использования с помощью 'connect()' или того, что вы собираетесь вызывать, и обрабатывать ошибки из этого API по мере их возникновения. Не пытайтесь предвидеть ошибки API. – EJP

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