Regex, чтобы соответствовать IP-адресу

Я новичок с регулярным выражением, и я хочу использовать preg_match функция для определения, является ли строка IP-адресом.

Например, если $string = "45.56.78.222" или что-то типа того, preg_match($regex, $string) должен вернуть истину. И что $regex должно быть?

3 ответа

Решение

Не используйте регулярные выражения, когда вам не нужно:)

$valid = filter_var($string, FILTER_VALIDATE_IP);

Хотя, если вы действительно хотите регулярное выражение...

$valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string);

Однако регулярное выражение будет проверять только формат, максимальное значение для любого октета равно максимальному значению для байта без знака, или 255,

Вот почему необходим IPv6 - длина IPv4 составляет всего 32 бита, а интернет популярен:)

/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/

следует сделать для вашего примера (который содержит строку, которая не является IP-адресом). И, конечно же, это только IPv4-адрес.

/^(?:(?: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]?)$/ 

Это проверит на идеальный диапазон, включая, если диапазон выше, чем 255 от любого из 4.

Другие вопросы по тегам