2014-10-17 87 views
0

好的,这可能很难解释。
密码不起作用的用户名。
我正在阅读文本文件。

“的用户名,密码”是为结构如下文本文件从文本文件中读取Javascript

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

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

中的JavaScript下面
的 “线”=以上

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"; 
    }; 
+0

一些情况下会很好......你想做什么? – 2014-10-17 04:22:25

+0

如果您有多个用户使用相同的密码,您应该使用indexOf,但仍不能解释这一点。 @NicolásStraubValdivieso你不明白什么? – mplungjan 2014-10-17 04:24:52

+0

获取排名前3位的密码,但不在文本文件中包含“test,BOL12345”。 – 2014-10-17 04:25:57

回答

1

猜测文本文件:你的文件正在使用\r\n。由于您正在拆分\n,因此\r会留在并损坏每个字符串。尝试拆分\r\n,看看会发生什么。这可以解释为什么添加最后一行会起作用,因为最后没有换行符,所以不会有后缀字符混淆indexOf搜索。

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

要正确处理所有的情况下,我建议正常化串在操作前:

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

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

可以简化正则表达式,因为令牌的顺序,以/\r\n|\r/,但我在离开它,因为它说明了一个整洁的概念(向前看符号 - 该位(?!\n)说,当且仅当没有紧跟一个\n )。与这说/\r\n|\r/将表现更好,尤其是当处理大文件

+1

感谢,似乎已经奏效。你认为你可以更深入地解释\ r在做什么,所以我可以更容易地理解以便进一步使用,请 – 2014-10-17 04:37:13

+0

@VaughanD回答更新:) – 2014-10-17 05:03:15