为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

泛舟湖上清波郎朗 2022-01-01 18:37:34
我希望从我的输入文本中替换任何不是护照格式(A9999999)的字符。我写了以下内容(此处为 jsfiddle):HTMLDoc 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 个字符它应该只接受数字(否则替换)。
查看完整描述

2 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

参考了Twisty 的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;

   }

 }


查看完整回答
反对 回复 2022-01-01
?
慕沐林林

TA贡献2016条经验 获得超9个赞

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


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


这种模式看起来A9最多A9999999。它将失败AA或99。


示例:https : //jsfiddle.net/Twisty/awL0onjg/20/


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()如果您想防止用户在该模式之外输入,请考虑使用。查看更多。


查看完整回答
反对 回复 2022-01-01
  • 2 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信