регулярное выражение, чтобы разрешить только цифры, числа с точкой и & и пробел - PullRequest
3 голосов
/ 11 июля 2019

Мне понадобится регулярное выражение, которое допускает только числа, пробелы, десятичные числа с точностью до 2 и знак &.

Это регулярное выражение будет использоваться для проверки ввода, который допускает наличие нескольких чисел, разделенных знаком &, и между ними может быть пробел (необязательный, но максимальный). Вот что я попробовал, из-за моего плохого понимания в регулярных выражениях, они работали так плохо.

^(?=.*[0-9])[ &.0-9]+$

но это не очень хорошо работает.

потому что такие вещи, как &&&&&& 1, пройдут проверку.

тоже пробовал такие вещи, которые тоже так плохо работают

^([0-9]{1,}[.]{0,1}[0-9]{0,2}[ ]{0,1}+[&]{0,1}[ ]{0,1})*?$

Следующее иллюстрирует то, что я ожидал

12 ---> (пас)

12.12 ---> (pass)

12 & 129.12 & 11 ---> (pass)

12 & 129. & 11 ---> (не должно пройти)

12 & .129 ---> (не должно пройти)

12 и 129..1 (не должно пройти)

12 и 129.111 (не должно пройти)

&&& 1 (не должно пройти)

.......

Большое спасибо заранее

1 Ответ

1 голос
/ 11 июля 2019

Чтобы учесть пробелы, вы можете сделать их необязательными, используя ?

Вы можете использовать повторяющийся шаблон, соответствующий 2 необязательным пробелам, и амперсанд:

^\d+(?:\.\d{2})?(?: ?& ?\d+(?:\.\d{2})?)*$

Пояснение

  • ^ Начало строки
  • \d+(?:\.\d{2})? Совпадение 1+ цифр и опционально совпадение с точкой и 2 цифрами
  • (?: НеЗахватывающая группа
    • [ ]?&[ ]? Соответствует необязательному пробелу (используется [ ] для ясности), & и необязательному пробелу
    • d+(?:\.\d{2})? Совпадает с 1+ цифрами и при желании совпадает с точкой и 2цифры
  • )* Закройте группу без захвата и повторите 0+ раз, чтобы также разрешить одну запись
  • $ Конец строки

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...