我正在尝试实现IBAN格式化程序,但是我想避免在开始时添加国家/地区代码。因此,此IBAN的掩码应如下所示:
XX XXXX XXXX XXXX XXXX XXXX XXXX
我实现了这个结果。但是,我无法编辑以前的字符。输入4个字符后,插入符号的位置向左移动。我也无法编辑字符,必须删除整个数字才能更正错误的数字。
这是我的代码:
input.addEventListener(e, function(e) {
var target = e.target, position = target.selectionEnd, length = target.value.length;
target.value = target.value.replace(/[^\dA-Z]/g, '').replace(/(\d)(?=(\d{4})+$)/g, '$1 ');
console.log("position: " + position)
console.log("selectionEnd: " + target.selectionEnd)
console.log("length: " + length)
console.log("target.length: " + target.value.length)
target.selectionEnd = position += ((target.value.charAt(position - 1) === ' ' && target.value.charAt(length - 1) === ' ' && length !== target.value.length) ? 1 : 0);
})
JSFiddle:https://jsfiddle.net/4r1mc2b9/
编辑:
或者也许有任何选择在前两个字符之后再每四个字符后添加一个空格?
谢谢
答案 0 :(得分:2)
您可以使用以下代码,每4个字符添加一个空格
document.getElementById('iban').addEventListener('input', function (e) {
var target = e.target, position = target.selectionEnd, length = target.value.length;
target.value = target.value.replace(/[^\dA-Z]/g, '').replace(/(^\d{2})/g, '$1 ').replace(/(\d{4})/g, '$1 ').trim();
target.selectionEnd = position += ((target.value.charAt(position - 1) === ' ' && target.value.charAt(length - 1) === ' ' && length !== target.value.length) ? 1 : 0);
});