RegExp: Вадилировать и 3, и 6 символов
Доброго времени суток.
Задача сделать так, что бы #111 и #111111 проходили валидацию, а промежуточные значения типа #1111 # #11111 нет. Проблема заключается в том, что если написать ^#[[:xdigit:]]{3,6}$ то 4 и 5 чисел попадают, а как сделать так что либо три, либо 6 непонятно.
Вариант который я нашел, но он мне не нравится по причине что это костыль: ^#([[:xdigit:]]{3}){1,2}$
Хочу найти аналог как если бы мы писали (один варинт|второй варинт) где "|" означает или. только не или это словосочетание или то, а или такое количчество символов, или другое.
Спасибо!
Ответы (1 шт):
Квантификатора {x|y} не существует.
У вас на выбор два варианта:
.{x}(.{y-x})?
.{x}(?:.{y-x})?
или
.{x}|.{y}
(.{x}|.{y})
(?:.{x}|.{y})
В вашем случае ^#([[:xdigit:]]{3}){1,2}$ не костыль, а лучшее решение, так как это выражение находит строку, начинающуюся со знака #, за которым следует один или два повтора трёх символов шестнадцатеричных чисел и конец строки.
Другие варианты не лучше:
^#[[:xdigit:]]{3}([[:xdigit:]]{3})?$
^#([[:xdigit:]]{3}|[[:xdigit:]]{6})$