問題

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

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

 <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>
 

明らかに問題に関連していないものは含まれていませんが、このスニペットでも機能しません。

  ベストアンサー

あなたの正規表現

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

を探します

  1. 文字列の先頭(チェック)
  2. 1文字以上、数字、またはアンダースコア(チェック)

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

最後に $ を置くと動作します - $ は '文字列の終わり'と一致するので、一致する唯一の方法は、文字列の開始と終了の間に数字、文字、アンダースコアがある場合です。

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

次に、HTMLを並べ替えると破損しないので、document.formsの代わりにdocument.getElementById('display-name').valueを使用することをお勧めします。

  同じタグがついた質問を見る

javascriptregex