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

时间:2020-03-05 18:41:18  来源:igfitidea点击:

因此,我正在写一张注册表,我需要显示的名称只能是数字,字母和下划线。

看一下我的代码,告诉我我在做什么错。

<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 _] + $ /

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

回答

"不工作"是指它允许无效条目通过(而不是不让有效条目通过)。

正如@Annan所说,这可能是由于表达式末尾缺少$字符所致,因为当前它仅需要在值的开头使用一个有效字符,其余的可以是任何字符。

回答

正则表达式

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

寻找

  • 字符串的开头(选中),然后是
  • 1个或者多个字母,数字或者下划线(选中)

然后不管发生什么事都没关系。只要以字母,数字或者下划线开头,此正则表达式将完全匹配任何内容

如果将$放在末尾,则$ $会匹配字符串的末尾,因此,它唯一可以匹配的方法是在字符串的开始和结尾之间只有数字,字母和下划线。细绳。

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

其次,我建议使用document.getElementById('display-name')。value而不是document.forms,因为如果我们重新排列HTML不会破坏它,它更是'公认的去做'

回答

我看到该代码段缺少分号(这是定义代码行结束位置的地方)。

回答

"无效"是什么意思?它拒绝有效的显示名称吗?它接受无效的显示名称吗?哪个?

每个@Annan,省略$会使正则表达式接受无效的显示名称,如abc123!@#。

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

回答

我测试了脚本并干预了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>

回答

抱歉,我应该更具体一些。每当我添加空格时,值仍然被接受。美元符号" $"成功了!

回答

一个更简单的写方法仍然是

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

回答

更简单:

var name_regex = /^\w+$/;