Регулярное выражение в JavaScript в очень специфическом формате - PullRequest
3 голосов
/ 13 апреля 2019

У меня есть вход, который должен отформатировать то, что печатает пользователь (на самом деле это информация с его банковского счета).Но числа должны быть отформатированы определенным образом:

  • первые 5 цифр должны быть числами.
  • если пользователь вводит более 5 цифр, последнее число должно иметь'-' перед этим
  • после 5 цифр пользователь может ввести 'x' или 'X'
  • число может иметь минимум 5 цифр и максимум 15

примеры:

  • 12345
  • 12345-1
  • 123456-1
  • 1234567-1
  • 12345-x
  • 123456789-x
  • 123456789-X
  • 12345678901234-5

На самом деле я использую нормализатор, который заменяет строку.

Это то, что я использую, но я не могу правильно отформатировать его.

export const normalizeBankAccount = value => {
    if (!value) {
      return value
    }

    if(value.length <= 16 && (!value.match(/[^\d|X]/g) || !value.match(/[^\d|-]/g) || !value.match(/[^\d|x]/g))) {
      if(value.length <= 5){
        return value.replace(/[^\d]/g, '')
      } else if(value.length >= 6) {
        const len = value.length;
        const aux=value;
        const initial = value.substring(0,value.length-1).replace('-', '');
        console.log("len: " +len, "\naux: " +aux,"\ninitial: "+ initial)
        return value.replace(new RegExp("\\d{"+ len +"}") , initial+ '-').replace(/[X]/g, '-X').replace(/[x]/g, '-x')
      }
    }
}

Когда я использую этот метод, строка форматируется следующим образом:

  • 12345-6789123

1 Ответ

4 голосов
/ 13 апреля 2019

Вы можете найти заданную длину, затем один символ и добавить знак минуса.

const
    normalize = string => string.replace(/^\d{5,14}(?=[0-9x]$)/i, '$&-');

console.log(['12345', '123451', '1234561', '12345671', '12345x', '123456789x', '123456789X', '123456789012345'].map(normalize));

Пример с вводом.

function update(element) {
    element.value = element.value
        .replace(/[^0-9x]/gi, '')
        .replace(/x(?=.)/gi, '')
        .replace(/^\d{5,14}(?=[0-9x]$)/i, '$&-');
}
<input type="text" onkeyup="update(this)" id="x">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...