Определение регулярного выражения для двух символов, а затем двух чисел - PullRequest
0 голосов
/ 23 октября 2019

Я использую регулярное выражение в своем приложении React для проверки ввода записи формы. Вход использует прослушиватель onChange для вызова функции, которая устанавливает состояние при изменении символа.

Допустимый ввод - два символа, за которыми следуют две цифры. т. е. RD01 или EX12

Я подключил его к работе. Это соответствует правильному регистру, хотя это также работает только для двух цифр. например, 01 или 12

    const onAssetChange = (e) => {
        const input = e.target.value.toUpperCase()
        const re = new RegExp('^[A-Z]{0,2}[0-9]{0,2}$')
        if (!input || input.match(re)) {
            setAssetID(input)
        }
    }

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

Ответы [ 5 ]

0 голосов
/ 23 октября 2019

Хорошо, так что это не красиво ...

    const onAssetChange = (e) => {
        const input = e.target.value.toUpperCase()
        const re = new RegExp('^[A-Z]{0,2}[0-9]{0,2}$')
        if (!input || input.match(re) && (input.length < 2 ? input[0].match(/[A-Z]/) : input.slice(0,2).match(/[A-Z][A-Z]/)) ) {
            setAssetID(input)
        }
    }

но это работает. Если у кого-то есть более элегантное решение, мне интересно его услышать.

0 голосов
/ 23 октября 2019

Это должно работать ...

const onAssetChange = (e) => {
    const input = e.target.value.toUpperCase()
    const re = new RegExp('^\w{2}\d{2}$')
    if (!input || input.match(re)) {
        setAssetID(input)
    }
}
0 голосов
/ 23 октября 2019

RegExp('^[A-Z]{0,2}[0-9]{0,2}$') проверит наличие символов 0, 1 или 2. То же самое будет делать с числами, поэтому даже A1 будет действительным. Попробуйте следующее:

const re = new RegExp('^[A-Z]{2}[0-9]{2}$')
0 голосов
/ 23 октября 2019

Вы можете использовать '^[A-Z][A-Z][0-9][0-9]$'.

0 голосов
/ 23 октября 2019

Попробуйте использовать [A-Z]{2}[0-9]{2} регулярное выражение.

Ошибка в вашем регулярном выражении была {0,2} совпадения квантификатора для 0 - 2 элементов в предоставленной кодировке. Вместо этого используйте {2}. Это подтвердит, что нужно проверять ровно 2 подсчета кодировки.

Я предлагаю использовать функцию mockFunction для обновления вашего ввода до требуемого стандарта, такого как отображение HI as HI00, AA as AA00, Aa as Aa00 и т. Д., И тестирование. эта высмеянная строка. Это образец для того же.

console.log('R -- ', mockInput('R'));
console.log('RD --', mockInput('RD'));
console.log('RD0 -- ', mockInput('RD0'));
console.log('RD01 -- ', mockInput('RD01'));
console.log('01 -- ', mockInput('01'));
console.log('R01 -- ', mockInput('R01'));
console.log('RD011 -- ', mockInput('RD011'));

function mockInput(input) {
  const returnStr = "AA00";
  const fakeInput = input.length >= 4? input: input + returnStr.substring(input.length, 4);
  const re = RegExp(/[A-Z]{2}[0-9]{2}/);
  let status = false;
  if (re.test(fakeInput)) {
    status = true;
  }
  return status;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...