【问题标题】:Best method to validate a three alphanumeric string against a list of available numbers and letters根据可用数字和字母列表验证三个字母数字字符串的最佳方法
【发布时间】:2020-04-06 22:29:09
【问题描述】:

我正在尝试验证输入字段并强制用户在输入错误时重新输入。 输入将始终是一个数字 1 到 22 和一个字符 A 到 F。我的代码如下所示,问题是输入的所有内容都被报告为“不好”。为什么?

function checkFD() {
    var str = $("#fieldday").val().trim().toUpperCase();
    var letterNumber = /^[1-22A-F]+$/;
        if (str.match(letterNumber)) {
            alert("its good");
            checkIn();
            return true;
        } else { 
            alert("not good"); 
            return false; 
        }
}

【问题讨论】:

  • 认为你想要.test() 而不是.match()
  • str.test() 不是函数,会引发错误。
  • 是的,应该是letterNumber.test(str);

标签: jquery match


【解决方案1】:

您的正则表达式不正确,它正在寻找由集合1,2,A,B,C,D,E,F 中的一些字符组成的输入。您需要检查第一部分是否是1-22 范围内的数字,然后是A-F 范围内的字符。这应该有效:

var letterNumber = /^(?:[1-9]|1[0-9]|2[0-2])[A-F]$/;

请注意,由于您只检查匹配项,因此您应该使用letterNumber.test(str) 而不是str.match(letterNumber)

【讨论】:

  • @KeithDKaiser 不用担心 - 我很高兴能提供帮助。
【解决方案2】:

考虑下面的代码。

$(function() {
  function checkIn() {
    // Do the needful
  }

  function checkFD() {
    var str = $(this).val().trim();
    var regex = /^(?:[1-9]|1\d|2[0-2])[A-F]$/i;
    var valid = regex.test(str);
    if (valid) {
      alert("its good");
      $(this).val($(this).val().toUpperCase());
      checkIn();
    } else {
      alert("not good");
    }
    return valid;
  }

  $("#code").change(checkFD);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="code" />

您可以输入1A22F,它会报告Good。如果输入23AF,则会报告Bad。

查看更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    相关资源
    最近更新 更多