簡體   English   中英

從文本文件讀取Javascript

[英]Reading From text file Javascript

好的,這可能很難解釋。
密碼對用戶名無效。
我正在從一個文本文件中讀取。

“用戶名,密碼”是下面的結構,是文本文件

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

前三名並不孤單,我只需要前三名
但是一旦我添加了“測試,BOL12345”
密碼BOL12345可以正常工作
但沒有“ test,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";
    };

有根據的猜測:您的文件正在使用\\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的正則表達式(但僅當\\ r不跟着\\ n時才匹配)。 這樣,您可以將所有CRLF和CR替換為LF,並處理來自任何環境的文本。

您可以根據令牌的順序將該正則表達式簡化為/\\r\\n|\\r/ ,但是我將其保留下來是因為它說明了一個簡潔的概念(先行–該位(?!\\n)表示如果並且僅當未緊跟\\n時才可以。 這樣, /\\r\\n|\\r/會更好,尤其是在處理大文件時

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM