@lexstile

Как составить маску для ввода для дробей?

Есть функция корявая для маски:
<ReduxFormMaskedField
    name={`equity-${index}`}
    mask={maskFraction}
  />
  maskFraction = (value) => {
    if (value.charAt(2) === '/') {
      return [/\d/, /\d/, /\//, /\d/, /\d/];
    }
    if (value.charAt(1) === '/') {
      return [/\d/, /\//, /\d/, /\d/];
    }
    if (value.charAt(1) !== '/') {
      return [/\d/, /\d/, /\//, /\d/, /\d/];
    }
    return [/\d/, /\d|\//, /\d|\//, /\d/, /\d/];
  }

Суть в чем, можно вводить только дроби, не более 99 по обе стороны от слеша.
Возможные примеры значений: 1/2, 1/25, 15/29
Как написать подобную функцию, но по-человечески? (при каждой проверке она должна возвращать массив с регулярным выражением для конкретного символа).
Единственное условие, которое не описано в функции - правая часть дроби не должна быть больше левой.
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 1
@marxxt
понравился ответ - поставь ✔
Такое?
https://regex101.com/r/tGvJaV/1

(?<=[^\d]|^)\d{1,2}\/\d{1,2}(?<![^\d])

var r = /(?<=[^\d]|^)(\d{1,2})\/(\d{1,2})(?<![^\d])/mg;
var match = r.exec("12/34");
match ? parseInt(match[1]) >= parseInt(match[2]): false;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы