好的,这可能很难解释
密码不适用于用户名
我正在阅读一个文本文件
"用户名,密码"下面的结构是文本文件
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";
};
答案 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/
表现更好,特别是在处理大文件时