我有一个输入文本字段,我想允许一个模式输入示例:
hd546648 -ok
Vg315248 - 确定> 2个字符可以是字母(小写,大写)和6个字符唯一的数字
on("input", "test", function(event) {
const invalidChars = /^[^A-Za-z]{1,2}\D{1,6}$/g;
ob = event.target;
if (invalidChars.test(ob.value)) {
ob.value = ob.value.replace(invalidChars, "");
}
});
如果我只使用它/^[^A-Za-z]{1,2}/g;
它的工作,我只能在文本框中输入字母,但如果我添加数字部分,那就错了。
我想要做的是,如果我在输入框中输入,替换任何不是A-Z或a-z的字符,前2,并替换任何其他不是0-9的字符为3-8。因此,对于前2个仅启用字母,而3到8仅启用数字。
答案 0 :(得分:1)
在整个事情上使用正则表达式将不起作用,因为每个验证都可以使输入的另一部分无效。此解决方案依次检查每个字符,并截断为最后一个有效字符的长度。在这里小提琴:https://jsfiddle.net/spwe4k21/
$(function() {
$("#submit").attr("disabled", true);
$("#userinput").keyup(function() {
let input = $(this).val();
let cleanedInput = cleanInput(input);
$(this).val(cleanedInput);
});
});
function cleanInput(input) {
let tests = [/[a-z]/i, /[a-z]/i, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/];
for (let i = 0; i < tests.length; i++) {
if (input[i] == undefined || !tests[i].test(input[i])) {
return input.substring(0, i);
}
}
return input.substring(0, tests.length);
}
答案 1 :(得分:0)
您可以将字符串拆分为具有这两个独立的部分,以便在两个部分上执行替换:
<强>更新强>:
document.getElementById("re").onkeypress = function (e) {
var keys = [8, 46, 37, 38]
if (!keys.includes(e.keyCode))
if (!/^[a-z]([a-z]\d{0,6})?$/i.test(e.target.value + e.key))
e.preventDefault();
};
&#13;
<input id="re" placeholder="Type something">
&#13;