如何在正则表达式的keyup上仅替换当前错误的字符?

我想从输入文本中替换任何非护照格式(A9999999)的字符。我写了以下(jsfiddle here):

HTML

Doc Type <input id='docType' value = 'PASS'/> <br>
Doc ID <input id='docId'/>

JS:

$(document).ready(function () {
    var docTypeVal = $("#docType").val();
    $('#docId').keyup(function() {
        if(docTypeVal == "PASS") {
            var $th = $(this);
            $th.attr("maxlength","8");

            if($th.val().length <= 1) {
                $th.val().replace(/[^a-zA-Z]/g,function(str) { 
                    alert('You typed " ' + str + ' ".\n\nPlease use correct format.'); 
                    return ''; 
                })
            }
            else if($th.val().length <= 8 && $th.val().length > 1) {
                $th.val().replace(/^(?!.*^([a-zA-Z]){1}([0-9]){7}$)/,function(str) { 
                    alert('You typed " ' + str + ' ".\n\nPlease use correct format.'); 
                    return ''; 
                })
            }
        }
    });
});

但是,首先,这不会替换任何字符(错误/正确)。其次,当我输入第二个字符以后,它就会发出警报。如果它是字母,则应该接受第一个字符(否则请替换);从第二个字符到第8个字符,应仅接受数字(否则请替换)。

jhcwengbin 回答:如何在正则表达式的keyup上仅替换当前错误的字符?

您可以使用1个正则表达式对此进行测试。

/^[a-z]?\d{0,7}$/i

此模式在A9A9999999之间。它将在AA99上失败。

示例:https://www.googleapis.com/auth/calendar

JavaScript

$(function() {
  var docTypeVal = $("#docType").val();
  $('#docId').keyup(function(e) {
    var exc = [
      11,// Tab
      127,// Del
    ];
    if (exc.indexOf(e.which) > -1) {
      return true;
    }
    var term = $(this).val();
    var re = /^[a-z]?\d{0,7}$/i;

    console.log("Testing:",term,re.test(term));
    if (re.test(term)) {
      $(this).removeClass("invalid");
      return true;
    } else {
      $(this).addClass("invalid");
    }
  });
});

如果要防止用户在该模式之外键入内容,请考虑使用.keydown()https://jsfiddle.net/Twisty/awL0onjg/20/

,

Fiddle Demo

引用了Twisty's的JS,并意识到它应该如下所示:

if(docTypeVal == "PASS") {
  $(this).attr("maxlength","8");
  var term = $(this).val();
  var re = /^[a-zA-Z]{1}\d{0,7}$/i;
  if (re.test(term)) {
      $(this).removeClass("invalid");
      return true;
    } else {
      $(this).addClass("invalid");
      $(this).val(term.replace(term.charAt(term.length-1),function(str) { 
      alert('You typed " ' + str + ' ".\n\nPlease use correct format.'); 
      return ''; 
    }));
    return false;
   }
 }
本文链接:https://www.f2er.com/3097230.html

大家都在问