Я новичок с регулярным выражением, и я хочу использовать 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.