Лучший способ проверить строку из трех букв c по списку доступных цифр и букв - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь проверить поле ввода и заставить пользователя перепечатать его, если оно плохое. Ввод всегда будет один номер от 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; 
        }
}

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Рассмотрим следующий код.

$(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" />

Вы можете ввести 1A до 22F, и он выдаст сообщение Хорошо. Если вы введете 23AF, появится сообщение «Плохо».

Подробнее: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

1 голос
/ 07 апреля 2020

Ваше регулярное выражение неверно, оно ищет ввод, состоящий из некоторого количества символов в наборе 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...