У меня есть ввод, который должен форматировать то, что печатает пользователь (на самом деле это информация с его банковского счета). Но числа должны быть отформатированы определенным образом:
Примеры:
На самом деле я использую нормализатор, который заменяет строку.
Это то, что я использую, но я не могу правильно отформатировать его.
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.info("len: " +len, "\naux: " +aux,"\ninitial: "+ initial)
return value.replace(new RegExp("\\d{"+ len +"}") , initial+ '-').replace(/[X]/g, '-X').replace(/[x]/g, '-x')
}
}
}
Когда я использую этот метод, строка форматируется следующим образом:



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете найти заданную длину, за которой следует один символ и добавить знак минус.
const
normalize = string => string.replace(/^\d{5,14}(?=[0-9x]$)/i, '$&-');
console.info(['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">вам нужно очистить строку от всех минусов и применить нормализацию.
Почти сработало, я удалил знак минус, как вы сказали, вот так: `string.replace('-', '').replace(/^\d{5,14}(?=[0-9x]$)/i , '$&-') ` Но я не могу ввести x или X
у вас есть какая-то другая фильтрация?
Нет, это просто
replace(/-/g, '') => Я не знал, что это правильный способ сделать это, теперь он работает =), большое спасибо
замена строкой вместо регулярного выражения заменяет только первое вхождение найденного. версия с регулярным выражением и глобальным флагом ищет все вхождения.
Можешь помочь еще с одним делом? Я хотел бы не позволять пользователю вводить что-либо, кроме 0-9, x или X, потому что таким образом пользователь может ввести любой символ
вы можете удалить ненужные символы. возможно, вам нужен еще один чек для более коротких предметов с 'x'.
Этот способ работает, и более короткие элементы уже не принимают «х», потому что я добавил условие
На самом деле это не работает, потому что числа должны быть отформатированы, поскольку пользователь продолжает печатать.