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

标签 javascript regex input regex-negation regex-group

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

hd546648-好的

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; 它的工作原理,我只能在文本框中输入字母,但是如果我添加数字部分有问题。

我想要做的,如果我在输入框中键入,则将前 2 个不是 A-Z 或 a-z 的任何字符替换为 3-8,并将除数字 0-9 之外的任何其他字符替换为 3-8。因此,前 2 个仅启用字母,第 3 到 8 个仅启用数字。

最佳答案

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

关于javascript - 正则表达式仅输入允许的模式(输入文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50171566/

相关文章:

javascript - 无法使用ajax jquery下载excel文件

javascript - 空文本框上的 JQuery 默认文本

c# - 如何替换 C# 中的特定单词?

java - 正向回溯正则表达式

ios - iPhone/iOS : Presenting HTML 5 Keyboard for Postal Codes

c++ - 测试用户是否按回车键(同时仍在测试良好输入)

php - AJAX 不触发 PHP 脚本

javascript - 通过json编码将AJAX响应传递给html中的不同div

java - 用正则表达式匹配两个url

python - 在 Python 中指定 input() 类型?