我做错了什么?[Javascript正则表达式]
所以我写了一份登记表,我需要显示的名称只有数字,字母和下划线 看看我的代码,告诉我我做错了什么我做错了什么?[Javascript正则表达式],javascript,regex,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>
<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>
它显然被删减了,不包括任何与问题无关的内容,但即使是这个代码片段也不起作用。我的regexp将遵循以下思路:
/^[a-zA-Z0-9\]+$/
编辑:我认为是因为缺少行尾而失败。我认为“不工作”是指让无效条目通过(而不是让有效条目通过) 正如@Annan所说,这可能是由于表达式末尾缺少
$
字符,因为目前它只需要在值的开头使用一个有效字符,其余字符可以是任何字符。您的正则表达式
/^([a-zA-Z0-9_])+/
寻找
$
放在末尾,则它将起作用-$
匹配“字符串结尾”,因此它唯一可以匹配的方法是在字符串的开头和结尾之间只有数字、字母和下划线
/^([a-zA-Z0-9_])+$/
其次,我建议使用document.getElementById('display-name').value
而不是document.forms
,因为如果重新排列HTML,它不会中断,而且更像是“通常接受的操作标准”什么是“不工作”的意思?它是否拒绝有效的显示名称?它是否接受无效的显示名称?哪一个
按照@Annan的说法,去掉$
将使regexp接受无效的显示名称,如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+$/;
\w是字母、数字和下划线的缩写。我将其简化为/^\w+$/@Juan,在大多数语言中,作为单词字符的内容取决于系统和语言环境,JS中不是这样吗?大多数正则表达式引用列表\w只是[a-zA-Z_0-9]的快捷方式。Java的:。PHP使用POSIX,它基本上说了相同的事情。也适用于JS<代码>/\w/.test(“é”)
在我的语言环境设置为pt br时返回false。我从未听说过\w在检测其他地区时非常聪明。