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.