从用户输入到 csv 文件内容中找到准确的值

find exact value from user input to csv file content

我有一个简单的 HTML 文件,输入文本 id="ERP",我希望用户能够找到与 CSV 文件内容完全匹配的内容。这是我一直试图修复的代码。这将搜索 CSV 文件,但 returns 结果与从输入框输入的值不完全相同,示例,输入框值 = "CH-134",输出将显示 "CH-134-DT" 的数据我怎么能使搜索结果与输入完全一样?提前谢谢你。

    var DB = new Array();
    function MakeDB() { DB = CSV.split('\n'); }

    function CSVsearch(dbInfo) {
    var posn = -1;
    for (i=0; i<DB.length; i++) {
    tmp = DB[i];
    if (tmp.indexOf(dbInfo) != -1) { posn = i; break; } 
    }
    if (posn == -1) { alert('No matching result from the file'); }
    else { document.getElementById('tblDisplay').innerHTML = displayAsTable(DB[posn]); }
    }
    function displayAsTable(info) {
    var table = '<table border="1" width="75%" bgColor="F5F5F5" borderColor="FFFFFF">';
    var ary = info.split(',');
    table += '<tr align="left"><th align="left">'+ary.join('</tr><th align="left">')+'</td></tr>';
    table += '</table>';
    return table;
    }
    function resetthis() {
    document.getElementById("myForm").reset();

}

我想我会使用 Javascript str.match(regexp) function 和正则表达式,而不是使用 str.indexOf(searchValue) 函数。

所以在你的情况下,我会做类似的事情:

var regex = '/\b' + dbInfo + '\b/g';
var matches = tmp.match(regex);
if (matches.length > 0) 
{ ... }

只需将上面的“\b”替换为您希望分隔传入数据的任何内容即可。例如,如果您希望找到 CH-134 在您的数据集中前后都有空格,您可以将 '\b' 留在那里。如果它在你的数据集中有逗号,你可以用 ',' 替换 '\b'。或者,如果您只知道要匹配的单词的结尾是什么,则可以省略正则表达式中的第一个 '\b'。例如,您可以这样做:

//finds occurences of dbInfo with anything before it, but only a comma after it
var regex = '/' + dbInfo + ',/g';

//finds occurences of dbInfo with a word break before it, and no hyphen after it
var regex = '/\b' + dbInfo + '[^-]/g';

您可能会想出更好、更精确的正则表达式来满足您的需要。我最喜欢玩和测试正则表达式的网站是 http://regexr.com/

祝你好运!

tadaaa,根据 Seth 的说法,我添加了 dbInfo + ',' 并简单地放置 'while' 这样当搜索命中相似的值时循环不会停止。呜呜呜

    var DB = new Array();
    function MakeDB() { DB = CSV.split('\n'); }

    function CSVsearch(dbInfo) {
    var posn = -1;
    var input = document.getElementById('ERP').value;
    for (i=0; i<DB.length; i++) {
    tmp = DB[i]; //ROW DATA
    while (tmp.indexOf(dbInfo+',') != -1) { posn = i; break; } 
    }
    var data = DB[posn];
    if (posn >=0) { (alert('RECORD FOUND!\nERP: ' + dbInfo));
    document.getElementById('tblDisplay').innerHTML = displayAsTable(data); }
    else { (alert ('NO RECORD FOUND')); }
    }
    function displayAsTable(info) {
    var table = '<table border="1" width="75%" bgColor="F5F5F5" borderColor="FFFFFF">';
    var ary = info.split(',');
    table += '<tr align="left"><th align="left">'+ary.join('</tr><th align="left">')+'</td></tr>';
    table += '</table>';
    return table;
    }
    function resetthis() {
    document.getElementById("myForm").reset();
    }