4

だから私は登録フォームを書いています、そして私は表示名が数字、文字とアンダースコアだけである必要があります。

私のコードを見て、私が間違っていることを教えてください。

<form method="post" action="/" onsubmit="return check_form()">
    <input type="text" id="display-name" name="display-name" maxlength="255" />
    <input type="submit" />
</form>
<script type="text/javascript">
<!--
    var name_regex = /^([a-zA-Z0-9_])+/

    function check_form()
    {
        if (!name_regex.test(document.forms[0].elements[0].value))
        {
            document.forms[0].elements[0].focus()
            alert("Your display name may only contain letters, numbers and underscores")
            return false
        }
    }
-->
</script>

問題に関係のないものが含まれないように明らかに調整されていますが、このスニペットでさえ機能しません。

4

8 に答える 8

14

あなたの正規表現

/^([a-zA-Z0-9_])+/

探す

  1. 文字列の開始(チェック)、続いて
  2. 1つ以上の文字、数字、またはアンダースコア(チェック)

そして、その後に来るものは何でも構いません。この正規表現は、文字、数字、またはアンダースコアで始まる限り、すべてに一致します。

$末尾にaを付けると、機能します- $「文字列の終わり」に一致します。したがって、一致できる唯一の方法は、文字列の開始と終了の間に数字、文字、およびアンダースコアしかない場合です。

/^([a-zA-Z0-9_])+$/

第二に、HTMLを再配置しても壊れないので、document.getElementById('display-name').value代わりに使用することをお勧めします。これは、より「一般的に受け入れられている標準です」document.forms

于 2008-08-20T21:22:48.820 に答える
6

私の正規表現は次のようになります。/^[a-zA-Z0-9_]+$/

編集:私$はそれが失敗するのはラインエンドの欠如だと思います。

于 2008-08-20T21:18:23.027 に答える
0

「機能しない」とは、(有効なエントリを通過させないのではなく)無効なエントリを通過させることを意味します。

@Annanが言ったように、これはおそらく式の最後に文字がないことが原因です。$現在、値の最初に1つの有効な文字しか必要とせず、残りは何でもかまいません。

于 2008-08-20T21:21:31.600 に答える
0

「機能しない」とはどういう意味ですか?有効な表示名を拒否しますか?無効な表示名を受け入れますか?どれ?

@Annanによると、を省略$すると、正規表現は。のような無効な表示名を受け入れるようになりますabc123!@#

コードが有効な表示名を拒否している場合は、グループを示すのではなく、括弧が文字通り一致していることが原因である可能性があります(JSの引用符の規則はわかりません)。

于 2008-08-20T21:26:32.353 に答える
0

私はあなたのスクリプトをテストし、javascriptをいじりました。これはうまくいくようです:

<form method="post" action="/" onsubmit="return check_form()">
    <input type="text" id="display-name" name="display-name" maxlength="255" />
    <input type="submit" />
</form>
<script type="text/javascript">
    <!--
    var name_regex = /^([a-zA-Z0-9_])+$/;

    function check_form()
    {
        if (!name_regex.test(document.forms[0].elements[0].value))
        {
            document.forms[0].elements[0].focus();
            alert("Your display name may only contain letters, numbers and underscores");
            return false;
        }
    }
    -->
</script>
于 2008-08-20T21:31:50.467 に答える
0

申し訳ありませんが、もっと具体的にすべきでした。スペースを追加するたびに、値はまだ受け入れられていました。ドル記号$がうまくいきました!

于 2008-08-20T22:33:35.000 に答える
0

さらに簡単:

var name_regex = /^\w+$/;
于 2008-08-21T04:31:29.367 に答える
0

それを書くより簡単な方法はまだ

var name_regex = /^([a-z0-9_])+$/i;
于 2008-08-20T22:48:12.407 に答える