0

件名のフィールドを検証しようとしています。これは後で POST し、mail() でメールを送信するときに使用します。

これまでのところ、正規表現を完成させ、元インターンのフィールド検証を使用して既存の Javascript を編集し、HTML 入力フィールドにパターンを追加し、次のページに小さなサーバー側の PHP/正規表現検証を記述しました。一見すると問題なく動作するように見えますが、入力フィールドのパターンを削除すると (Chrome で要素を検査して)、Javascript チェックが完全にスキップされ、フォームが投稿されます。サーバー側のチェックが原因で、前のページに戻りました。

私が使用するコードの一部を次に示します。

Javascript

<script type="text/javascript">
    if($.browser.msie || navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1)
    {
        jQuery(function(){
            $("#submit").click(function(){
            $(".error").hide();

            var hasError = false;
            var onderwerpReg = /^[a-zA-Z0-9_]{4,20}[^\/'"<>;]*$/;
            var onderwerpVal = $("#subject").val();

            if (onderwerpVal == '')
            {
                $("#subject").html('<br/><span class="error">Vul een onderwerp in.</span>');
                var hasError = true;
            }
            else if (!onderwerpReg.test(onderwerpVal))
            {
                $("#subject").html('<br/><span class="error">Onderwerp bevat gefilterde karakters.</span>');
                var hasError = true;
            }
            if (hasError == true)
                return false;
            });
        });
    }
</script>

HTML

<input type="text" id="subject" name="subject" size="30" placeholder="Onderwerp" required aria-required="true" pattern="^[a-zA-Z0-9_]{4,20}[^\/'&quot;<>;]*$"/>

私の質問は、Javascript の一部がスキップされる可能性があるのはなぜですか? 正しく読み込まれていませんか?Javascriptプレーンは間違っていますか? 反対に、私のウェブサイトの他のフォームでも機能するので、同じ方法で検証フィールドに固執すると思いました.

4

2 に答える 2

1

間違っているかもしれませんが… if($.browser.msie || navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1)。チェックは、IE または Safari を使用している場合にのみ行われます。
よくわかりませんが、ブラウザがエラー (パターンが一致しない) でフォームを送信するのを妨げている可能性があるため、彼はパターン属性をサポートしていないブラウザのみをチェックするようにしました (それほど多くはありません)。とにかく、ユーザーはJSでの検証をスキップしたいことを何でもできるので問題です)。繰り返しますが、それについてはよくわかりません。

編集:
エラーのある送信フォームの部分について。私がテストしたところ、パターンに一致する場合にのみ送信できます(または空の文字列ですが、そのための必須属性があります)。

于 2013-04-11T09:51:41.620 に答える
0

Loamhoof が既に述べたように、あなたの JS コードは chrome では実行されません。

しかし、入力フィールドのパターンを削除すると (Chrome で要素を検査して)、Javascript チェックは完全にスキップされます。

このpattern属性は JavaScript とは関係ありません。

HTML5 仕様の一部として、スクリプトを使用せずにブラウザー自体によってフォーム フィールドが直接検証されます。

したがって、ここでの JavaScript コードは実際には、HTML5 フォーム フィールドの検証をまだ実装していない Internet Explorer のフォールバック ソリューションにすぎません。(おそらく IE 10 はそうですが、<= 9 は絶対にそうではありません。)

あなたの質問については、JS を介したこの検証が無視された場合に有害かどうか - いいえ、データ サーバー側で検証する場合 (これは絶対に常に行う必要があります)、実際には「有害」ではありません。クライアント側の検証を行うことは、ユーザーの使いやすさの問題です。これにより、ユーザーは、まだ正しく入力されていないフォームを送信する手間が省け、次のページでサーバー側で生成されたエラー メッセージが表示されるだけです。ユーザーが IE を使用しているときにこの快適な機能をユーザーに提供するためにこのスクリプトを保持するか、最新のブラウザーで HTML5 の方法でのみ動作することで問題ないかは、あなた次第です。

于 2013-04-11T10:06:27.883 に答える