使用javascript屏蔽电话号码,删除字符

时间:2017-11-12 09:58:37

标签: javascript regex

我正在尝试使用此格式+4 (444) 444-44-88

的javascript屏蔽电话号码

基于此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],则可以删除所有字符串'-''()'

jsfiddle

1 个答案:

答案 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;
});