Внесение позднего вклада:
^(?!\.)((^|\.)([1-9]?\d|1\d\d|2(5[0-5]|[0-4]\d))){4}$
Из проверенных мной ответов они либо более длинные, либо неполные в своей проверке.По моему опыту, чем дольше, тем труднее упускать из виду и, следовательно, более склонным к ошибкам.И мне нравится избегать повторения подобных паттернов по той же причине.
Основная часть, конечно же, это тест на число от 0 до 255, но также и то, что он не допускает начальные нули (за исключением случаев, когда он один):
[1-9]?\d|1\d\d|2(5[0-5]|[0-4]\d)
Три чередования - одно для саба 100: [1-9]?\d
, одно для 100-199: 1\d\d
и, наконец, 200-255: 2(5[0-5]|[0-4]\d)
.
Этому предшествует проверка начала строки или точки .
, и все это выражение проверяется 4 раза добавленной {4}
.
Этот полный тест для четырехбайтовых представлений начинается с проверки начала строки с последующим отрицательным просмотром вперед, чтобы избежать адресов, начинающихся с .
: ^(?!\.)
, и завершается проверкой конца строки($
).
См. Некоторые примеры здесь на regex101.