2013-04-25 42 views
1

我絕對是一個新手,正在嘗試一個練習項目。 它基本上是一個字謎遊戲,用戶點擊某些字母來拼出單詞。 我現在需要檢查它實際上是一個單詞。我製作了一個文本文件,其中包含字典中的所有單詞(從某個網站複製爲其實踐項目)。我設法弄到了,所以如果我可以console.log的話。Javascript/jquery搜索字符串中是否存在單詞

function Searchtext(){ 
    $.get('words.txt', function(data) { 
console.log(data); 



}, 'text'); 
    } 

現在我想搜索的話,看看玩家的答案(這是一個變量,名爲playeranswer聲明字符串)是在列表中。我不需要它返回這個詞,只是它是否存在。注:它必須是確切的,例如,如果用戶輸入了不是單詞的「ender」,它將不會回來,因爲它找到了單詞「渲染」。 .length也許有幫助?

我該如何去做這件事?

感謝您的任何幫助。

+3

結帳的RegExp – 2013-04-25 20:51:23

+0

[正則表達式的文檔(HTTPS://developer.mozilla。org/en-US/docs/JavaScript/Guide/Regular_Expressions)以供參考。 – ajp15243 2013-04-25 20:59:44

+0

您每次用戶嘗試驗證該單詞時,都打算進行服務器調用?爲什麼不把JavaScript變量中的所有單詞放在第一位呢?你有沒有任何服務器端編程語言?如果是,那麼爲什麼不檢查服務器端並返回true/false? – Ejaz 2013-04-25 21:10:21

回答

3

由於$.get是異步,你將不得不稍微設置它。我應該這樣做:

function Searchtext(name, callback) { 
    $.get('words.txt', function(data) { 
     data = data.split("\n"); 
     var contains = (data.indexOf(name) > -1); 
     callback(contains); 
    }, 'text'); 
} 

根據文本文件是如何設置,你可能需要更改.split("\n")(該字分裂成一個數組,如果他們每一個上線).split(" ")(如果它們被空格分隔,則將單詞分成數組)。

而且你會打電話來它像:

DEMO:http://jsfiddle.net/Fkr5B/

在演示中,我不得不模擬AJAX請求。

+0

如果一個單詞後跟一個逗號怎麼辦? – sgroves 2013-04-25 21:17:36

+0

@sgroves沒有。 'data'是一個數組,因此'indexOf'中使用的值必須完全匹配數組中的項目。 – Ian 2013-04-25 21:17:44

+0

@sgroves OP沒有太多關於文本文件格式的信息。我假設。所以,是的,有幾種選擇,幾件事情,需要在不同的情況下完成。 – Ian 2013-04-25 21:18:17

0

您應該首先解析data變量並將單詞放入Array。 然後,您可以通過檢查您的Array是否包含該單詞來測試用戶是否輸入了有效的單詞。

var Dict = new Array("render", "bender", "word"); 

function isValid(word){ 
    if(Dict.indexOf(word) == -1) 
     return false; //the word is not valid 
    return true; //the word is valid 
}  
+0

'返回(!(Dict.indexOf(word)== -1));' – 2013-04-25 21:11:19

+0

或'return Dict.indexOf(word)> -1' – Ejaz 2013-04-25 21:12:20

0

你最好的選擇是正則表達式。 你可以做的是採取由用戶輸入的字符串,正則表達式與 字邊界指示把它包起來(因此將匹配確切的詞,並沒有別的) ,然後用火柴()

2

我會使用正則表達式(使用RegExp對象)。下面是試圖以文字的兩個不同的字符串匹配一個字一個簡單的例子:

var word_to_match = 'ender'; 
var string_of_words = 'a string containing the word ender, this will match'; 
var second_string_of_words = 'a string that will not produce a match'; 

//use \b to match on word boundaries 
var filter = new RegExp('\\b' + word_to_match + '\\b', 'gi'); 

if(string_of_words.match(filter)) { 
    alert('found word: ' + word_to_match); 
} else { 
    alert('did not find word: ' + word_to_match); 
} 

if(second_string_of_words.match(filter)) { 
    alert('found word: ' + word_to_match); 
} else { 
    alert('did not find word: ' + word_to_match); 
} 

你會看到第一個if聲明通過,而第二個失敗。可能需要一點點閱讀,但你應該能夠擴展這個例子來適應你的用例。

+0

謝謝,我使用了'\\ b'+ playeranswer +'\\ b','gi',它完美運行! – Truvia 2013-04-25 22:35:10

0

我做了這個簡單的腳本,希望它有助於

$(document).ready(function(e) { 
    function parseData(data) { 
    $('#inpu').blur(function() { 
     var str_to_search = $.trim($('#inpu').val()); 
     if(str_to_search.length) { 
      var search_res = data.search(str_to_search); 
      if(search_res != -1) { 
       alert('Word Valid!'); 
      } else { 
       alert('Word no valid'); 
      } 
     } 
    }); 
} 
$.get('to_search.txt', parseData).fail(function() { alert('error');}); 
}); 
相關問題