在每4个字符后给出一个空格后编辑前一个字符

问题描述 投票:0回答:1

我正在尝试实现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/

编辑:

或者可能有任何选项在前2个字符之后添加空格,然后在每4个之后添加一个空格?

谢谢

javascript
1个回答
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);
});
© www.soinside.com 2019 - 2024. All rights reserved.