2013-04-25 2 views
1

저는 확실히 초보자이며 연습 프로젝트를 시도하고 있습니다. 기본적으로 사용자가 단어를 조합하기 위해 특정 문자를 클릭하는 아나그램 게임입니다. 이제는 실제로 단어인지 확인해야합니다. 사전에있는 모든 단어를 포함하는 텍스트 파일을 만들었습니다 (someones 웹 사이트에서 복사 된 것). 나는 내가 콘솔화할 수 있다면 그것을 얻을 수 있었다. 단어들을 기록하라.Javascript/Jquery 문자열에 단어가 있는지 검색하십시오.

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



}, 'text'); 
    } 

은 지금은 선수의 대답 (변수라고 playeranswer에 선언 된 문자열) 목록에 있는지 확인하기 위해 단어를 검색 할. 나는 그것이 그곳에 있든 없든 오직 그 말을 되풀이 할 필요가 없다. N.B. 예를 들어 사용자가 단어가 아닌 "ender"를 입력 한 경우 "렌더링"이라는 단어를 찾기 때문에 사실로 돌아 가지 않습니다. .length를 사용하면 도움이 될 것입니다.

어떻게해야합니까?

도움 주셔서 감사합니다.

+3

체크 아웃 정규식 –

+0

[정규식 문서 (HTTPS 도움이되기를 바랍니다.org/ko-ko/docs/JavaScript/Guide/Regular_Expressions)를 참조하십시오. – ajp15243

+0

사용자가 단어를 확인할 때마다 서버 호출을하는 것이 목표입니까? 왜 자바 스크립트 변수에 모든 단어를 넣지 않는 것이 좋을까요? 서버 측 프로그래밍 언어가 있습니까? 그렇다면 서버 측을 확인하고 true/false를 반환하지 않는 이유는 무엇입니까? – Ejaz

답변

3

가) (사용 후 일치, 사용자가 입력 한 문자열을 정규 표현식에 을 단어 경계 표시와 함께 포장 (그래서 정확한 단어와 다른 아무것도 일치)이며 비동기식이라면 조금 다르게 설정해야합니다. 나는이 할 거라고 : 텍스트 파일은 설치 방법에 따라

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

을, 당신은 (.split(" ")에 (그들이 선에 각각 인 경우, 배열에 단어를 분할하는) .split("\n")을 변경해야 할 수도 있습니다 공백으로 구분 된 단어는 배열로 나눕니다).

그리고 당신이 그것을 좋아 호출 것 :

SearchText(playername, function (matched) { 
    if (matched) { 
     // Name was in list 
    } else { 
     // Name wasn't in list 
    } 
}); 

DEMO : 데모에서http://jsfiddle.net/Fkr5B/

, 내가 AJAX 요청을 시뮬레이션했다.

+0

단어 뒤에 쉼표가 오는 경우 어떻게됩니까? – sgroves

+0

@sgroves 아니요. 'data'는 배열이므로,'indexOf'에서 사용 된 값은 배열의 항목과 정확하게 일치해야합니다. – Ian

+0

@sgroves OP의 텍스트 파일 형식에 대한 정보는 많지 않습니다. 나는 추측하고있다. 그래서 예, 여러 가지 옵션이 있습니다. 여러 가지 시나리오가 필요합니다. – Ian

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

'return (! (Dict.indexOf (word) == -1)); ' –

+0

또는'return Dict.indexOf (word)> -1' – Ejaz

0

최상의 방법은 정규 표현식입니다. 당신이 할 수있는 일 는 $.get 이후

2

정규식 (RegExp 개체 사용)을 사용합니다. 두 번째 실패하면서 첫 번째 if 문, 통과 볼 수

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); 
} 

: 다음 단어의 두 개의 서로 다른 문자열에서 단어를 일치 시키려고하는 간단한 예입니다. 조금 읽는 것이 필요할 수도 있지만 유스 케이스에 맞게이 예제를 확장 할 수 있어야합니다. //developer.mozilla :이 간단한 스크립트를했습니다

+0

으로 답변을 업데이트했습니다. '\\ b'+ playeranswer + '\\ b', 'gi'를 사용하여 완벽하게 작동했습니다! – Truvia

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');}); 
}); 
관련 문제