Проверка и подтверждение файла - PullRequest
1 голос
/ 17 февраля 2020

Итак, у меня есть этот код, сделанный здесь более упрощенным способом:

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

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

    for (var line = 0; line < lines.length; line++) {
      if (N.test(lines[line])) {
        console.log(lines[line]);
      } else {
        console.log("Invalid register = ", lines[line]);
      }
    }
}

Мне нужен способ, чтобы можно было показать сообщение, сообщающее мне, что файл соответствует всем этим требованиям, и если не то, чтобы можно было напечатать сообщение о том, что файл недействителен, но продолжайте показывать мне это сообщение на консоли. Как я могу это сделать? Другой вопрос, который у меня есть, есть ли способ указать, что может быть только один регистр с именем N1

ЗДЕСЬ ПРИМЕР ФАЙЛА

N108258594000135255240708     315370        BLABLA BLABLABL BLAB BLA                          
N2BLA2222016BLABLA BLABLABLA                                3525.250    
N3BLABLABLABL.EXE                                   01BF011351A2B06D7A88048CBDDC53CE
N908234944000135255240708     000016

Ответы [ 2 ]

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

Насколько я понимаю, вы обрабатываете каждую строку одну за другой, и это ошибка, если существует более одного "регистра с именем N1", то есть строки, которая прошла тест регулярного выражения и начинается с N1. Поэтому вы должны отслеживать, видели ли вы уже такую ​​строку:

var reader = new FileReader();
var invalidRegister = false;
var seenN1 = false;
reader.onload = function(progressEvent) {
    // By lines
    var lines = this.result.split('\n');
    let N = /^(N1\d{14}.{78}|N2.{70}|N3.{82}|N9\d{14}.{14}\d{6})$/;

    for (var line = 0; line < lines.length; line++) {
      let s = lines[line];
      if (N.test(s)) {
        if (s.substr(0, 2) == 'N1') {
          if (seenN1) {
             console.log("Repeat N1 register = ", s);
             invalidRegister = true;
             continue;
          }
          seenN1 = true;
        }
        console.log(s);
      } else {
        console.log("Invalid register = ", s);
        invalidRegister = true;
      }
    }
    if (invalidRegister) {
      console.log('The file is not valid.');
    }
};
1 голос
/ 18 февраля 2020

Если не должно быть вхождений 2 раза N1, вы можете использовать отрицательный прогноз (?!.*N1.*N1) в начале паттерна, утверждающего не 2 раза N1

^(?!.*N1.*N1)(?:N1\d{14}.{78}|N2.{70}|N3.{82}|N9\d{14}.{14}\d{6})$

Regex demo

Чтобы сохранить сообщения и показать сообщение после l oop, если все прошло, вы можете, например, ввести переменную и присвоить ей значение по умолчанию true.

Если есть строка, которая не соответствует, вы меняете переменную на false.

Например

// By lines
var lines = this.result.split('\n');
let N = /^(?!.*N1.*N1)(?:N1\d{14}.{78}|N2.{70}|N3.{82}|N9\d{14}.{14}\d{6})$/;
var passAll = true;

for (var line = 0; line < lines.length; line++) {
    if (lines[line].trim() === "") continue;
    if (N.test(lines[line])) {
        console.log(lines[line]);
    } else {
        passAll = false;
        console.log("Invalid register = ", lines[line]);
    }
}
console.log(passAll === true ? "All lines passed" : "Not all lines passed");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...