代码在这里正常工作..但是根据问题,它实际上无法正常工作,我想验证数字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" />
最佳答案
您当前面临的问题是由于您通过更改v
,v1
和v2
变量设置了某些状态。您的格式化程序应该是无状态的,因此每次您使用相同的输入调用它时,它都会返回相同的结果。
您可以使用模板字符串。然后遍历输入值索引,对于每个索引,检查模板字符串中允许的内容。
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/