Regex соответствует IP-адресу

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

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

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

 $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 для байта без знака или 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.