2010-08-16 3 views
1

양식 내에 텍스트 영역이 있습니다. 양식이 제출되기 전에 비어 있지 않도록자바 스크립트로 단어 배열을 텍스트 입력으로 비교

는, 텍스트 영역, 나는 검증의 마지막 부분에 있어요

... 등 금지 문자를 포함하지 2000 자 이상, 검증 및 점검 텍스트 영역을 "나쁜 단어"의 배열과 비교해야 할 것입니다.

내 사이트에서 좋은 "언어"를 유지 관리하는 데 도움이됩니다.

저는 js에별로 좋지 않습니다. 그렇다면 텍스트 영역의 각 단어를 나쁜 단어 배열과 비교하는 방법을 알고있는 사람이 있습니까?

또한 이렇게하면 유효성 검사가 많이 느려 집니까? (배열에는 최대 100 단어까지 포함).

my_textarea = document.getElementById('textarea_id'); 

if (/\b(?=\w)(expletive1|expletive2)\b(?!\w)/i.test(my_textarea.value)) { 
    // we found bad words! do something 
} else { 
    // no bad words found, carry on, nothing to see here 
} 

그리고 당신은 단지에 더 많은 단어를 추가 할 것입니다 : 당신이 "expletive2는"다음 작업을 수행 할 것 "expletive1"과의 존재를 확인하고 싶었다면

감사

+0

클라이언트 측 유효성 검사를 쉽게 무시할 수 있습니다. 또는 서버쪽에있는 물건 (또는 둘 다 할 계획이 있습니까?) –

+0

사실 저는 각 게시물을 수동으로 조사 할 것이기 때문에 실제로 클라이언트 측만을 계획했습니다 ... 이것은 내 일을 더 쉽게 만들어주는 것입니다. –

답변

1

같은 방식으로 목록 (expletive1 | expletive2 | expletive3 | expletive4)

앱에서 단어를 완전히 지키려면 서버 측 필터링도 수행해야합니다.

+0

코드를 이해하기 쉽도록주의하십시오. 이렇게하면 텍스트 영역의 각 단어가 배열과 일치합니까? –

+0

희망을 갖고 조금 더 명확하게 편집했습니다. 전체 텍스트 영역을보고 텍스트 영역에서 해당 단어를 찾으면 일치합니다. 이것은 매우 간단한 정규식이며 우회하기 쉽습니다 (예 : 똥은이 정규식에 관한 한 똥과 구별됩니다). – Aaron

+0

좋아, 그럼 내가 "똥"과 "똥"목록에 추가하면 어떻게됩니까? "멍청이들"과 일치하지 않을거야? 감사합니다. –

1

정규식이 100 개일 필요가 없기 때문에 코드를 조금 더 깔끔하게 유지할 수 있습니다.

+0

이 모든 텍스트 영역 전체 단어를 매치시겠습니까? 텍스트 영역을 분할하여 단어 단위로 확인해야합니다. –

+0

이것은 '모듬'과 같은 단어를 금지하게 만드는 상당히 순진 정규식입니다. – Aaron

+0

깨끗하고 관리하기 쉽기 때문에 크레딧을받을 자격이 있습니다. if 문 내부에서 단어 목록을 편집하는 것은 추악합니다. Camran, 아마도 당신은 Aaron과 Jonah의 답변을 결합 할 수 있습니다. – Tarik

1

이 코드는 당신이 원하는 경우에 당신이 나를 downvote 수 jsfiddle

1
var bad_words = new Array('word1', 'word2'); 
var user_words = document.getElementById('textarea').split(/\W+/); 

for(var i in bad_words) 
{ 
    if(user_words.indexOf(bad_words[i]) != -1) 
    { 
    alert('The textarea has bad word!'); 
    break; 
    } 
} 
+0

+1 그리고 SO에 오신 것을 환영합니다. 제 블로그에서 약간의 토론이있었습니다. :) – Sarfraz

+0

잘못된 단어가 구두점 옆에 있으면 작동하지 않습니다. – Aaron

+0

@sarfaraz : 그래, 기억해 : –

0

를 참조하십시오 *****

// creating regex 
var words = ['bad', 'words']; 
var wordsStr = ""; 
for(var i=0; i<words.length; i++) { 
    wordsStr += words[i]; 
    if (i < words.length -1) { 
     wordsStr += "|"; 
    } 
} 
// wordsStr is "bad|words" 
var regex = new RegExp(wordsStr, "gi"); // g: replace all; i:insensitive 

// replacing 
var text = "I cant say bad words!"; 
text = text.replace(regex, "****"); 
// text is "I cant say **** ****!" 

과 나쁜 단어를 대체하지만, 어쩌면 그냥하지 않습니다 clbuttic mistake 첫 번째 장소에서 필터링하려고 시도 : D

관련 문제