2013-04-25 121 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');}); 
}); 
相关问题