1

私はJavascriptが初めてなので、ご容赦ください。このコードの目的は、フォームの送信時にテキストエリア内の「がらくた」、「醜い」、「ガキ」という単語をブロックすることです。ユーザーが送信を押した後、悪い言葉が星印 ( * *) になるようにします。これは私が割り当てられた純粋な練習レッスンなので、実際に使用する必要はありません。

このコードの問題は、送信を押すと、テキストエリア内のすべてのテキストが消えることです。したがって、ブロックする単語はもうありません。

コードは次のとおりです。

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Bad Words Blocker Test</title>
    <script type="text/javascript" language="javascript">

        var buttonPress = function ()
        {
            var com = getElementById(comments);
            var filterWords = ["crap", "ugly", "brat"];
            // "i" is to ignore case and "g" for global
            var rgx = new RegExp(filterWords.join(""), "gi");
              function WordFilter(str) {
            return str.replace(rgx, "****");
        }               
        }
    </script>
</head>
<body>
    <form name="badwords" method="post" action="">
    <textarea name="comments" id="comments" rows="5" cols="50"></textarea>
    <br />
    <input id="formSub" type="submit" onclick="(buttonPress())" value="Submit!" />
    </form>
</body>
</html>
4

3 に答える 3

4

アクションを関数に分割することをお勧めします。

var button = document.getElementById('formSub');

function replaceWords(event) {
    //Prevent form submission to server 
    event.preventDefault();
    var commentContent = document.getElementById('comments');
    var badWords = ["crap", "ugly", "brat", "basterddouch"];
    var censored = censore(commentContent.value, badWords);
    commentContent.value = censored;
}

function censore(string, filters) {
    // "i" is to ignore case and "g" for global "|" for OR match
    var regex = new RegExp(filters.join("|"), "gi");
    return string.replace(regex, function (match) {
        //replace each letter with a star
        var stars = '';
        for (var i = 0; i < match.length; i++) {
            stars += '*';
        }
        return stars;
    });

}

button.addEventListener('click', replaceWords);

ここで実際の例を見ることができます ==> JSfiddle

于 2013-06-29T23:07:51.240 に答える
0

WordFilter()関数を呼び出す必要があります

また、ボタンのクリックではなく、フォームの onSubmit イベントをキャッチする必要があります

そしてあなたgetElementByIdは間違った方法で電話をかけた

そして、正規表現が間違って作成されました:)

したがって、コードは次のようになります(動作します、テスト済みです):

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Bad Words Blocker Test</title>
    <script type="text/javascript" language="javascript">

        var buttonPress = function ()
        {
            var com = document.getElementById('comments');
            var filterWords = ["crap", "ugly", "brat"];
            // "i" is to ignore case and "g" for global
            var rgx = new RegExp("("+filterWords.join("|")+")", "gi");
            com.value = com.value.replace(rgx, "****");

            // change this to 'return true;' when you will be sure that all your bad words are catched and the form is ready to be submitted
            return false;
        }
    </script>
</head>
<body>
    <form name="badwords" method="post" action="" onsubmit="return buttonPress();">
    <textarea name="comments" id="comments" rows="5" cols="50"></textarea>
    <br />
    <input id="formSub" type="submit" value="Submit!" />
    </form>
</body>
</html>
于 2013-06-29T22:26:00.643 に答える