我正在尝试实现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个之后添加一个空格?
谢谢
您可以使用以下代码每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);
});