Console.log не работает при тестировании регулярных выражений - PullRequest
0 голосов
/ 06 февраля 2020

Может кто-нибудь объяснить, почему мой журнал консоли не работает?

Каждый раз, когда я выбираю файл для проверки, чтобы увидеть, если что-то показывает в консоли ничего не происходит

document.addEventListener("DOMContentLoaded", function() {
  document.getElementById('file').onchange = function() {

    var extPermitidas = ['txt'];
    var extArquivo = this.value.split('.').pop();

    if (typeof extPermitidas.find(function(ext) {
        return extArquivo == ext;
      }) == 'undefined') {
      alert('The file cannot be used because its extension is not allowed!');
      return;
    } else {
      var file = this.files[0];

      var reader = new FileReader();
      reader.onload = function(progressEvent) {


        // By lines
        var lines = this.result.split('\n');
        let N = /^(N1\d{14}.{78}|N9\d{14}.{14}\d{6})$/;

        for (var line = 0; line < lines.length; line++) {
          if (N.test(lines[line]) == N) {
            console.log("valid file");
          } else {
            console.log("invalid file");
          }
        }
      };
      reader.readAsText(file);
    }
    alert('file successfully validated!');
  }
});
<input type="file" id="file" />

РЕДАКТИРОВАТЬ

Может ли быть проблема в условном if (N.test(lines[line]) == N)?

Ответы [ 2 ]

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

Вы уже проверили свои условия или пытаетесь разместить console.log в различных частях вашего кода? Может быть, это проблема с запуском событий. Я пытался запустить ваше регулярное выражение с моей консоли, я думаю, это работает гладко.

Результат регулярного выражения

1 голос
/ 06 февраля 2020

Похоже, это проблема контекста функции. Попробуйте изменить var file = this.files[0]; на var file = document.getElementById("file").files[0];.

this иногда бывает сложно, поскольку его значение определяется способом вызова функции (привязка во время выполнения). См. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

Редактировать: Условное if (N.test(lines[line]) == N) странно. Метод test() выполняет поиск соответствия между регулярным выражением и указанной строкой и возвращает true или false. Таким образом, вам не нужно сравнивать результат теста с == N. Кроме того, вы почти всегда хотите использовать тройные равенства (===).

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