从文本文件Javascript中读取

时间:2014-10-17 04:15:59

标签: javascript validation genfromtxt

好的,这可能很难解释 密码不适用于用户名 我正在阅读一个文本文件
"用户名,密码"下面的结构是文本文件

John,BOL12345
Mary2,BOL77777
Anna,BOL54321
test,BOL12345

前3名不单独工作我只需要前3名 但是一旦我添加了"测试,BOL12345"
密码BOL12345确实有效 但没有"测试,BOL12345"密码" BOL12345"不起作用或任何其他的 我这样做所有在javascript下面将是代码片段..请问任何问题,因为我不明白为什么会发生这种情况。

下面的JavaScript
" line" =上面的文本文件

    lines = x.responseText.split("\n");
    for (i=0; i < lines.length; i++)
    {
        test1 = lines[i].split(",")
        username.push(test1[0]);
        password.push(test1[1]);

    }
    var tempUsername = document.getElementById('username').value;
    var tempPassword = document.getElementById('password').value;
    var arraycontainsusername = (username.indexOf(tempUsername) > -1);
    var arraycontainspassword = (password.indexOf(tempPassword) > -1);
    alert(password);
    if (arraycontainsusername && arraycontainspassword) {
        window.location.href = "listing.htm";
    };

1 个答案:

答案 0 :(得分:1)

受过教育的猜测:您的文件正在使用\r\n。由于您按\n分割,\r会被遗留下来并破坏每个字符串。尝试按\r\n拆分,看看会发生什么。这可以解释为什么添加最后一行会起作用,因为最后没有换行符会有一个尾随字符来扰乱indexOf搜索。

不同的操作系统以不同方式处理文本文件。 Windows使用CRLF(回车换行)跳转到下一行,而* NIX变量使用LF。旧的MacOS版本使用CR。您的代码假设文件来自* NIX环境,其中LF(或\n)是标准,当它来自Windows环境时,CRLF(或\r\n)是常态(不是准确,因为您可以在Windows中使用LF制作文本文件,并使用* NIX中的CRLF,购买即可获得图片。

为了正确处理所有情况,我建议在处理之前规范化字符串:

x.responseText.replace(/\r\n|\r(?!\n)/g, '\n').split('\n');

中间看似中文的字符串实际上是一个匹配\ r \ n或\ r \ n的正则表达式(但仅当\ r \ n后面没有\ n时)。这样,您可以将所有CRLF和CR替换为LF并处理来自任何环境的文本。

你可以将令牌的顺序简化为正则表达式/\r\n|\r/,但我将其留在原因,因为它说明了一个简洁的概念(前瞻性 - 该位(?!\n)表示当且仅如果不是紧接着\n)。据说/\r\n|\r/表现更好,特别是在处理大文件时