首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件验证和验证

文件验证和验证
EN

Stack Overflow用户
提问于 2020-02-17 17:17:44
回答 2查看 56关注 0票数 1

因此,这里的代码是以更简化的方式编写的:

代码语言:javascript
复制
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的寄存器

这里是一个文件示例

代码语言:javascript
复制
N108258594000135255240708     315370        BLABLA BLABLABL BLAB BLA                          
N2BLA2222016BLABLA BLABLABLA                                3525.250    
N3BLABLABLABL.EXE                                   01BF011351A2B06D7A88048CBDDC53CE
N908234944000135255240708     000016
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-17 21:38:12

如果没有出现2次N1,则可以在模式开始时使用负前瞻(?!.*N1.*N1),而不是断言2次N1

代码语言:javascript
复制
^(?!.*N1.*N1)(?:N1\d{14}.{78}|N2.{70}|N3.{82}|N9\d{14}.{14}\d{6})$

Regex演示

若要保留消息并在循环后显示消息(如果所有消息都已通过),您可以引入一个变量并给它一个默认值true。

如果有不匹配的行,则将变量更改为false。

例如

代码语言:javascript
复制
// 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");
票数 1
EN

Stack Overflow用户

发布于 2020-02-18 12:46:11

我的理解是,您正在逐一处理每一行,如果有多个“寄存器名为N1",即通过regex测试并以N1开头的行,这将是一个错误。所以你必须跟踪你是否见过这样的一条线:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60267502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档