Regex соответствует IP-адресу
Я новичок с регулярным выражением, и я хочу использовать функцию preg_match
, чтобы узнать, является ли строка IP-адресом.
Например, если $string = "45.56.78.222"
или что-то подобное, preg_match($regex, $string)
должен возвращать значение true. Итак, что $regex
должно быть?
Ответы
Ответ 1
Не используйте регулярное выражение, когда вам не нужно:)
$valid = filter_var($string, FILTER_VALIDATE_IP);
Если вам действительно нужно регулярное выражение...
$valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string);
Однако регулярное выражение будет только проверять формат, max для любого октета - это max для байта без знака или 255
.
Вот почему необходим IPv6 - адрес IPv4 имеет длину всего 32 бита и популярный интернет:)
Ответ 2
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
должен сделать для вашего примера (который содержит строку, которая не является IP-адресом). И, конечно, это только адрес IPv4.
Ответ 3
/^(?:(?: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.