有人可以解释为什么我的控制台日志不起作用吗?
每次我选择要验证的文件以查看控制台中是否显示任何内容时,没有任何反应
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放置在代码的各个部分?也许这是事件触发的问题。我试图用我的控制台运行您的正则表达式,我想它运行顺利。
正则表达式结果