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

时间:2008-08-20 21:11:35

标签: 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>

显然已将其删除,不包括与问题无关的任何内容,但即使此代码段也不起作用。

8 个答案:

答案 0 :(得分:14)

你的正则表达式

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

寻找

  1. 开始字符串(检查),然后是
  2. 一个或多个字母,数字或下划线(支票)
  3. 然后无论发生什么事都没关系。这个正则表达式将匹配任何东西,只要它以字母,数字或下划线开头

    如果你在最后添加$,那么它将起作用 - $匹配'字符串结尾',所以唯一可以匹配的方法是 only 字符串开头和结尾之间的数字,字母和下划线。

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

    其次,我建议使用document.getElementById('display-name').value代替document.forms,因为如果重新排列HTML,它就不会中断,并且更像是“通常接受的标准”

答案 1 :(得分:6)

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

编辑:我认为缺少行结尾$会使其失败。

答案 2 :(得分:0)

通过'不工作'我认为它是指让无效的条目通过(而不是让有效的条目通过)。

正如@Annan所说,这可能是由于表达式末尾缺少$字符,因为目前它只需要在值的开头有一个有效字符,并且休息可以是任何事情。

答案 3 :(得分:0)

“不起作用”是什么意思?它是否拒绝有效的显示名称?它是否接受无效的显示名称?哪些?

Per @Annan,不让$使正则表达式接受无效的显示名称,如abc123!@#

如果代码拒绝有效的显示名称,可能是因为括号按字面匹配而不是表示组(我不确定JS中的引用约定)。

答案 4 :(得分: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>

答案 5 :(得分:0)

对不起家伙我应该更具体一点。每当我添加空格时,值仍然被接受。美元符号$成功了!

答案 6 :(得分:0)

编写它的简单方法仍然是

var name_regex = /^([a-z0-9_])+$/i;

答案 7 :(得分:0)

更简单:

var name_regex = /^\w+$/;