Нужно сделать регэкс, который будет признавать валидным или пустую строку, или строку, состоящую ровно из 3 цифр. Пишу на
https://regex101.com/ такое
^(\d{0})|(\d{3})$
Натравливаю на 999999 — считает валидным. Натравливаю на 999 — тоже валидное. Натравливаю на 9 и на пустую строку — снова все валидное. Что за хрень и как мне переписать его правильно?
Здравствуйте, m2user, Вы писали:
CRT>>^(.{0}|\d{3})$
CRT>>(правда, зачем тебе группы)
M>тогда уж лучше так
M>M>^(|\d{3})$
M>
точно
или так
^$|^\d{3}$
просто .{0} явно и наглядно говорит "хочу 0 символов"
Здравствуйте, m2user, Вы писали:
CRT>>^(.{0}|\d{3})$
CRT>>(правда, зачем тебе группы)
M>тогда уж лучше так
M>M>^(|\d{3})$
M>
А если группы не нужны, скорее всего тут не нужны.
То лучше их заранее убрать для быстродействия.
^(?:|\d{3})$
На будущее посмотри
https://regex101.com.
Вставляешь свой regexp, получаешь подробное описание.
RD>На будущее посмотри https://regex101.com.
RD>Вставляешь свой regexp, получаешь подробное описание.
топикстартер о нем упоминает в стартовом сообщении.
IMHO пока сам не проведешь эксперимент, как работает alternation без скобочек, не поймешь в чем дело.
В
документации от MS об этом случае явно не написано.
Здравствуйте, Glestwid, Вы писали:
G>Нужно сделать регэкс, который будет признавать валидным или пустую строку, или строку, состоящую ровно из 3 цифр.
Каноническое регулярное выражение для такого:
^(\d{3})?$
\d — захватывает одну цифру, {3} делает это ровно три раза, ? делает захват опциональным.