我正在尝试使用此格式+4 (444) 444-44-88
基于此answer,我想出了这个解决方案
document.getElementById('phone').addEventListener('input', function (e) {
let x = e.target.value.replace(/\D/g, '').match(/(\d{1})(\d{0,3})(\d{0,3})(\d{0,2})(\d{0,2})/);
e.target.value ='+' + x[1] + '(' + x[2] + ')' + x[3] + '-' + x[4] + '-' + x[5];
});
它有效,但问题是我似乎无法从输入中删除字符
我一击'-'
退格就行不通。但是,例如,如果我删除每个号码x[i]
,则可以删除所有字符串'-'
和'()'
。
答案 0 :(得分:0)
退格不起作用的原因是,当您点击退格键时,它实际上会删除" - "但是然后你的事件监听器再次将值重新分配给输入框,看起来好像退格不起作用。
这是解决问题的一个混乱但有效的解决方案:
document.getElementById('phone').addEventListener('input', function (e) {
let hasUnclosedParanthesis = !e.target.value.match(/\)/g) && e.target.value.match(/\(/g);
//alert(e.target.value, hasUnclosedParanthesis);
let x = e.target.value.replace(/\D/g, '').match(/(\d{1})(\d{0,3})(\d{0,3})(\d{0,2})(\d{0,2})/);
let pn = '+';
if(x[1]) {
pn += x[1];
}
if(x[2] && !hasUnclosedParanthesis) {
pn += '(' + x[2] + ')';
}
if(x[2] && hasUnclosedParanthesis) {
pn += '(' + x[2].substring(0, x[2].length-1) + ')';
}
if(x[3]) {
pn += x[3];
}
if(x[4]) {
pn += '-' + x[4];
}
if(x[5]) {
pn += x[5];
}
e.target.value = pn;
});