Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript regex仅输入允许的模式(输入文本)_Javascript_Regex_Input_Regex Negation_Regex Group - Fatal编程技术网

Javascript regex仅输入允许的模式(输入文本)

Javascript regex仅输入允许的模式(输入文本),javascript,regex,input,regex-negation,regex-group,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(inv

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

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的任何其他字符。因此,对于前2个仅启用字母,从3到8个仅启用数字。

您可以拆分字符串,使其具有这两个单独的部分,以便在两个部分上执行替换:

更新:

document.getElementByIdre.onkeypress=函数e{ 变量键=[8,46,37,38] 如果!keys.includese.keyCode 如果!/^[a-z][a-z]\d{0,6}?$/i.teste.target.value+e.key e、 防止违约; };
在整个过程中使用正则表达式是行不通的,因为每次验证都会使输入的另一部分无效。此解决方案依次检查每个字符,并截断到最后一个有效字符的长度。在这里拉小提琴:


可能更好的办法是使用一个模式=[a-zA-Z]{2}[0-9]{6},它将执行最终的输入检查。@WiktorStribiżew该模式仅在提交之前进行验证,但我希望在键入时允许该模式我理解,但若你们问我的话,这是一个相当烦人的方法。你们可以使用with test,若它不匹配,返回false,则不允许输入。否则,允许输入。但是您仍然需要执行最终的验证检查,例如,使用pattern=[a-zA-Z]{2}[0-9]{6}。请参见使用。最后一个输入将d546648作为输出。这是一个无效的模式,所以应该再次更正,不是吗?结果应该是d,因为没有足够的字母来开始数字部分。在我的javascript函数中,我不知道如何使其可行,是否可以对无效字符进行分组或类似操作?@SimonBrahan是的,你是对的,当用户在输入框中键入时,如果不正确,则不允许输入任何其他内容,不匹配pattern@almostokey那么,您想接受d546648吗?或者4d546648应该怎么办?@revo有一个由Wiktor Stribiżew用jQuery编写的正确示例,我想用纯javascript编写:oninput,test,functionevent{input=event.target.value;const tests=[/[a-z]/I,/\d/,/\d/,/\d/,/\d/,/\d/]{if-input[i]==未定义的| |!tests[i]{input=input.substring0,i;}};我无法让它工作假设您可以按照代码中描述的方式获取和设置输入值,这应该适合您:有一种方法可以让用户输入:k123456和kk123456,此函数稍作修改?启用以6个数字输入一个或两个字母?听起来类似,但这比这更复杂,因为您无法再使用JUDon’不要逐字核对。我想你应该把它作为一个单独的问题问。
$(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);
}