所以我正在写一个注册表,我需要显示名称只是数字,字母和下划线。
看看我的代码并告诉我我做错了什么。
<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>
显然已将其删除,不包括与问题无关的任何内容,但即使此代码段也不起作用。
答案 0 :(得分:14)
你的正则表达式
/^([a-zA-Z0-9_])+/
寻找
然后无论发生什么事都没关系。这个正则表达式将匹配任何东西,只要它以字母,数字或下划线开头
如果你在最后添加$
,那么它将起作用 - $
匹配'字符串结尾',所以唯一可以匹配的方法是 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+$/;