从键盘输入期间在每 n 个字符后加上破折号并编辑确切数字

put dash after every n character during input from keyboard and edit exact number

我从 找到了这个教程。它看起来像 this:35-354-55444-54-54324..它工作正常但是当我尝试编辑任何代码时它不工作correctly.when 我按退格键它会自动 number.Here 是我的代码:

function format(input, format, sep) {
  var output = "";
  var idx = 0;
  for (var i = 0; i < format.length && idx < input.length; i++) {
    output += input.substr(idx, format[i]);
    if (idx + format[i] < input.length) output += sep;
    idx += format[i];
  }

  output += input.substr(idx);
  return output;
}

$('.creditCardText').keyup(function() {
  var foo = $(this).val().replace(/-/g, ""); // remove hyphens
  // You may want to remove all non-digits here
  // var foo = $(this).val().replace(/\D/g, "");

  if (foo.length > 0) {
    foo = format(foo, [2, 3, 5, 2, 5], "-");
  }

  $(this).val(foo);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input class="creditCardText" maxlength="21" />

实际问题是,据我了解,当您在某处删除数字时,字符串会重新格式化,而且光标会跳到末尾。这使得难以进行快速且有意义的编辑。

我建议使用 trap the backspacedelete 键,在这种情况下跳过字符串重新格式化过程。这可能有副作用,但应该适合您的需要。

function format(input, format, sep) {
  var output = "";
  var idx = 0;
  for (var i = 0; i < format.length && idx < input.length; i++) {
    output += input.substr(idx, format[i]);
    if (idx + format[i] < input.length) output += sep;
    idx += format[i];
  }

  output += input.substr(idx);
  return output;
}

$('.customerNumberText').keyup(function(e) {
  if(e.keyCode == 8   //alert('backspace')
  || e.keyCode == 46) //alert('delete')
  return;


  var foo = $(this).val().replace(/-/g, ""); // remove hyphens
  // You may want to remove all non-digits here
  // var foo = $(this).val().replace(/\D/g, "");

  if (foo.length > 0) {
    foo = format(foo, [2, 3, 5, 2, 5], "-");
  }

  $(this).val(foo);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input class="customerNumberText" maxlength="21" />