我在这里做错了什么? [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+$/;