1

ここにスクリプトがあります:

http://jsfiddle.net/d2rcx/

入力文字列を比較するための badWords の配列があります。

このスクリプトは、入力文字列が罵り言葉の文字列と正確に一致する場合は問題なく動作しますが、罵り言葉の前の空白など、文字列内により多くの文字があるバリエーションは検出されません。

このサイトを参照として使用: http://www.zytrax.com/tech/web/regex.htm

次の正規表現は、文字列内の文字列を検出すると述べています。

var regex = new RegExp("/" + badWords[i] + "/g");
        if (fieldValue.match(regex) == true)
            return true;    

しかし、そうではないようです。

正規表現を機能させるには、何を変更する必要がありますか。

ありがとう

また、Googleが表示するものよりも正規表現を説明するための良いリンクをいただければ幸いです。

4

4 に答える 4

3

修正された JSFiddle は次のとおりです。

http://jsfiddle.net/d2rcx/5/

RegExp については、次のドキュメントを参照してください。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp

2 番目のパラメーターは、フラグを指定する場所であることに注意してください (例: 'g' または 'i')。例えば:

new RegExp(badWords[i], 'gi');
于 2013-01-31T14:05:25.100 に答える
2

これを行うために Regex を使用するよりも、単に悪い単語の配列をループして、[indexOf] を使用して文字列内のインスタンスを探すほうがよいでしょう。( https://developer.mozilla.org/en-US/docs/JavaScript/ Reference/Global_Objects/String/indexOf )

そうでなければ、次のような正規表現を作成できます...

\badword1|badword2|badword3\ 

一致するかどうかを確認します。

正規表現の単語境界は\b、あなたが言うことができるようです

\\b(badword1|badword2|badword3)\b\

これは単語全体にのみ一致します-つまり、Scunthorpeは問題ありません:)

var rx = new RegExp("\\b(donkey|twerp|idiot)\\b","i"); // i = case insenstive option

alert(rx.test('you are a twerp')); //true

alert(rx.test('hello idiotstick')); //fasle -not whole word

alert(rx.test('nice "donkey"')); //true

http://jsfiddle.net/F8svC/

于 2013-01-31T14:02:37.700 に答える
2

http://www.w3schools.com/jsref/jsref_match.aspを確認してください。fieldValue.match() はブール値ではなく、一致の配列を返すことに注意してください。

于 2013-01-31T14:03:05.350 に答える
2

これを変更すると、ループが必要になります。

var regex = new RegExp("/" + badWords[i] + "/g");

このため:

var regex = new RegExp("/" + badWords.join("|") + "/g");

スタートでしょう。これにより、配列は各要素がパイプで区切られた 1 つの文字列になるため、すべての一致が一度に実行されます。

PS RegEx のリファレンス ガイドはこちら。しかし、特定の機能に関して何が可能で何が不可能か、また何が良いコードであるかについて、オンライン上に明確な情報はあまりありません。David Flanagan の最新のJavaScript: The Definitive Guideと Douglas Crockford のJavaScript: The Good Parts for the most useable JavaScripts, including RegEx. Crockford の鉄道図は特に優れていますが、オンラインで入手できるかどうかはわかりません。

編集: これは、関連する章のオンライン コピーです。これには、役立つ場合に備えて、言及した鉄道図の一部が含まれています

于 2013-01-31T14:05:51.450 に答える