正则表达式仅输入允许的模式(输入文本)

regex input only the allowed pattern (input text)

我有一个输入文本字段,我想在其中允许模式输入示例:

hd546648 -ok

Vg315248 - ok > 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 只启用数字。

您可以将字符串拆分为两个单独的部分,以便对两个部分执行替换:

更新:

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();
};
<input id="re" placeholder="Type something">

在整个过程中使用正则表达式是行不通的,因为每次验证都会使输入的另一部分无效。该解决方案依次检查每个字符,并截断为最后一个有效字符的长度。 Fiddle 这里: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);
}