Не используйте регулярные выражения для проверки диапазона номеров.
Просто используйте условие ...
if ($number >= 0 AND $number <= 255) {
...
}
Это будет гарантировать, что число находится в диапазоне от 0 до 255 включительно, что, по-видимому, и делает ваше регулярное выражение.
Чтобы конкретно ответить на ваш вопрос, он не работает, потому что вам нужно обернуть все это группой захвата, в противном случае механизм регулярных выражений выполнит ИЛИ каждого отдельного регулярного выражения ...
/^([0-1]?[0-9]?[0-9]|[2][0-4][0-9]|25[0-5])$/
Также обратите внимание, что $
будет соответствовать перед любым трейлингом \n
. Используйте \z
, если вы действительно хотите найти соответствие в конце строки.