代码在这里正常工作..但是根据问题,它实际上无法正常工作,我想验证数字00 / 00-00-0000格式的数字/字母..但是此代码仅在第一次填充值后才起作用正确,但在明文之后填写值验证工作不正确。



var v = "0";
var v1 = "0";
var v2 = "0";

function myFunction() {
  var x = document.getElementById("vname");
  x.value = x.value.toUpperCase();
  var add = "-";
  var string = x.value;
  var str = "";
  var len = string.length;
  if (len > 13) {
    x.value = string.substring(0, 13);
  }
  if (len > 2 && v == "0") {
    var str = x.value;
    x.value = setCharAt(str, 2, '-');
    v = "1";
  }
  if (len > 5 && v1 == "0") {
    var str = x.value;
    x.value = setCharAt(str, 5, '-');
    v1 = "1";
  }
  if (len > 8 && v2 == "0") {
    var str = x.value;
    x.value = setCharAt(str, 8, '-');
    v2 = "1";
  }
}

function setCharAt(str, index, chr) {
  if (index > str.length - 1) return str;
  return str.substr(0, index) + chr + str.substr(index + 1);
}

<input type="text" oninput="myFunction()" id="vname" />

最佳答案

您当前面临的问题是由于您通过更改vv1v2变量设置了某些状态。您的格式化程序应该是无状态的,因此每次您使用相同的输入调用它时,它都会返回相同的结果。

您可以使用模板字符串。然后遍历输入值索引,对于每个索引,检查模板字符串中允许的内容。



function myFunction(input) {
  const format = "xx-xx-xx-xxxx";

  var value = ""; // new value
  for (let i = 0; i < input.value.length; ++i) {
    switch (format[i]) {
      case "-":
        value += "-";
        break;
      case "x":
        value += input.value[i];
        break;
    }
  }

  input.value = value.toUpperCase();
}

document
  .getElementById("vname")
  .addEventListener("input", event => myFunction(event.target));

<input type="text" id="vname" />

关于javascript - 如何在Javascript中验证文本oninput()的00-00-00-0000格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58004951/

10-10 00:27
查看更多