我在这做错了什么?[Javascript正则表达式]

And*_*son 3 javascript regex

所以我正在写一个注册表,我需要显示名称只是数字,字母和下划线.

看看我的代码并告诉我我做错了什么.

<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>
Run Code Online (Sandbox Code Playgroud)

它显然已被删除,不包括与问题无关的任何内容,但即使这个代码段也不起作用.

Ori*_*rds 14

你的正则表达式

/^([a-zA-Z0-9_])+/
Run Code Online (Sandbox Code Playgroud)

寻找

  1. 字符串开始(检查),然后是
  2. 1个或多个字母,数字或下划线(勾选)

然后无论发生什么事都没关系.这个正则表达式将匹配任何东西,只要它以字母,数字或下划线开头即可

如果你把一个$放在最后,那么它将起作用 - $匹配'字符串的结尾',所以它匹配的唯一方法是在字符串的开头和结尾之间只有数字,字母和下划线.

/^([a-zA-Z0-9_])+$/
Run Code Online (Sandbox Code Playgroud)

其次,如果您重新排列HTML ,我建议使用document.getElementById('display-name').value而不是document.forms因为它不会破坏,并且更像是"通常接受的标准"

  • \ w是字母,数字和下划线的简写.我会把它简化为/ ^\w + $ / (2认同)

Ann*_*nan 6

我的正则表达式将遵循: /^[a-zA-Z0-9_]+$/

编辑:我认为缺少一个线路终端$使它失败.