Подтвердите ввод, чтобы быть действительной дробью - PullRequest
0 голосов
/ 04 февраля 2020

Необходимо проверить ввод от поля ввода, чтобы быть положительной дробью в одном из трех форматов:

  1. Целое число - 1, 2 15, 15, ... и т. Д. c.
  2. Дробь - 1/2, 3/4, 5/16, ... et c.
  3. И целое число, и дробь - 1 1/2, 3 5/15, 12 5/5, ... et c.

Но отклонить 2 2 1/2, 2 a / 2 или 15/32 et c.

Я даже не могу придумать близкого. Я думал об этом, но даже не близко. /\d{0,2}(\s\d{1,2}\/\d{1,2})?

Ответы [ 3 ]

0 голосов
/ 04 февраля 2020

Вы можете использовать чередование , используя | для совпадения с ди git, дробью, 2 цифрами или ди git и дробью.

Если вы хотите сопоставить 1 или 2 цифры, которые вы можете использовать \d{1,2} вместо \d+

^\d+(?:\/\d+$|(?: \d+(?:\/\d+)?)?)$
  • ^ Начало строки
  • \d+ Соответствие 1+ цифр
  • (?: Группа без захвата
    • \/\d+$ Совпадение только с дробной частью (/ и 1+ цифрами и подтверждением конца строки)
    • | Или
    • (?: Группа без захвата
      • \d+(?:/\d+)? Соответствует пробелу, 1+ цифр и необязательно / и 1+ цифр
    • )? Закрыть группу без захвата и сделать ее необязательной
  • ) Закрыть группу без захвата
  • $

Regex demo

0 голосов
/ 04 февраля 2020
^(\d+\s+\d+\/\d+|\d+\/\d+|\d+)$
  • Одна группа захвата: ()
  • ^ для начала
  • $ до конца
  • \ s для пробела (1+) при работе с c ниже ..
  • | для 3 комбинаций:
    • a) int + дробь
    • b) дробь
    • c) int

Вам все еще придется иметь дело с верхними тяжелыми дробями с дополнительным кодом, опрашивающим группы захвата.

Чтобы расширить это .., следующая настройка будет способствовать этому.

^(\d+\s+(\d+)\/(\d+)|(\d+)\/(\d+)|\d+)$

Затем вы нужно будет либо посмотреть либо:

  • захват группы 4 и 5, если речь идет только о дроби (b), либо
  • захват группы 2 и 3, если речь идет о целых плюс дробь ( а)

Итак, чтобы уточнить, для 5 3/4: группы захвата:

1 = 5 3/4

2 = 3

3 = 4

Для 2/3: Группы захвата:

1 = 2/3

4 = 2

5 = 3

И если вы хотите также опросить целые числа ..

^(\(d+)\s+(\d+)\/(\d+)|(\d+)\/(\d+)|\d+)$

Это будет шунтировать группу захвата 2-> 3, 3-> 4, 4-> 5, 5-> 6 выше .. и группа захвата 2 теперь даст вам целое число также для сценария а). Группа захвата 1 будет целым числом для сценария c).

Вы можете увидеть его в действии здесь .

0 голосов
/ 04 февраля 2020

Это проверяет два целых числа, разделенных символом /, которому предшествует необязательное целое с пробелом. Он также включает отдельную проверку, которая будет соответствовать одиночному целому числу.

^(?:\d+ )?\d+\/\d+$|^\d+$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...