Эта тема на forum.dklab.ru


Ost: Глупый вопрос по регам
Взялся с регулярными выражениями разбираться.
"([0-9]{1,3})"
Что я пишу не так? Мне нужно выяснить с помощью рега - является ли строка целым положительным числом от 0 до 999.

Спасибо.
Ost:
нашел как нужно.
"^[0-9]{1,3}$"

Знающие люди, если не затруднит, пожалуйста, поясните это выражение по символу. Пожалуйста.
Спасибо.
Никита Косолaпов:
читайте http://www.debugger.ru/articles/nativeregexp - хорошее подспорье для начинающих и запутавшихся :)
Ost:
Никита Косолaпов, спасибо за ссылку.
zaxar:
Тут все просто.

"([0-9]{1,3})"

Этот шаблон проверяет, если ли в строке цифры от 0 до 9, которых всего может быть от 1 до 3-х. Следовательно он подходит для числа, например, 567. А еще он легко подходит для строки, например, asd45gh7. Почему? Потому что в этой строке есть цифра, которая повторяется от 1 до 3-х раз, что, собственно, указано в шабоне. И таких цифр тут 3. Цифра 4 повторяется 1 раз. Подходит. Цифра 5 тоже повторяется один раз. Тоже подходит. Семерка — аналогично. Поэтому все работает не так как надо.

"^[0-9]{1,3}$"

А здесь уже более четкий шаблон, который говорит, что строка начинается (^), затем идут цифры от 0 до 9 (от 1 до 3-х штук), затем строка заканчивается ($). И ничего лишнего в ней быть не может.

Это частая ошибка новичков.
Ost:
zaxar, спасибо большое. Значит ^ обозначает начало строки, если он не в скобках? А если так [^0-9], тогда он работает, как отрицающий? Еще такой вопрос тогда - почему для "([0-9]{1,3})" подходит строка '0-9' ?
Rumata:
обычная проверка уже не спасает отца русской демократии?

if ( $value >= 0 && $value <= 999 )
if ( $value >= 0 && $value < 1000 )

Никита Косолaпов:
Rumata, возможно, человеку надо сделать это именно с помошью регулярного выражения? :)
Ost:
Rumata, спасиб) Я в регах разбираюсь просто.

Вопрос решен, тему можно закрыть.

Эта тема на forum.dklab.ru