控制台.log测试正则表达式时不起作用



有人可以解释为什么我的控制台日志不起作用吗?

每次我选择要验证的文件以查看控制台中是否显示任何内容时,没有任何反应

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 = /^(N1d{14}.{78}|N9d{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)的问题吗?

这似乎是一个函数上下文问题。 尝试将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进行比较。 另外,您几乎总是希望使用三等 (===(。

您是否已经检查了条件或尝试将控制台.log放置在代码的各个部分?也许这是事件触发的问题。我试图用我的控制台运行您的正则表达式,我想它运行顺利。

正则表达式结果

相关内容

最新更新