2014-10-17 102 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