通过javascript进行用户名验证不起作用
所以我被困在这里了。我希望用户名有一个约束,即它不应该以任何特殊字符开头。我认为正则表达式不起作用。有人能帮忙吗通过javascript进行用户名验证不起作用,javascript,html,Javascript,Html,所以我被困在这里了。我希望用户名有一个约束,即它不应该以任何特殊字符开头。我认为正则表达式不起作用。有人能帮忙吗 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>username test</title> </head> <body> <form id="form1" on
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>username test</title>
</head>
<body>
<form id="form1" onsubmit="user()" name="form1" method="post" action="">
<p align="center"> <img src="gecp.png" width="144" height="144" alt="gecp" /></p>
<p align="center">
<label for="username">Username</label>
<input type="text" name="username" id="user" required/>
</p><p id="p1"> </p>
<p align="center">
<label for="pass">Password</label>
<input type="password" name="pass" id="pass" required/>
</p><p id="p2"> </p>
<p align="center">
<input name="sub" type="submit" id="sub" value="Submit" />
</p>
</form>
<div align="center"></div>
<script type="text/javascript">
function user(){
var name1=document.getElementById("user").value;
var u1=/^[a-zA-Z]$/;
if(name1.value.match(u1)){
return true;
}
else {
document.getElementById("p1").innerHTML= "Invalid Input";
name1.focus();
return false;}
}
</script>
</body>
</html>
用户名测试
用户名
暗语
函数用户(){
var name1=document.getElementById(“用户”).value;
变量u1=/^[a-zA-Z]$/;
if(name1.value.match(u1)){
返回true;
}
否则{
document.getElementById(“p1”).innerHTML=“无效输入”;
name1.focus();
返回false;}
}
函数将返回一个包含字符串匹配组的数组。您需要的是测试
功能
function user(){
var name1=document.getElementById("user").value;
var u1=/ˆ(\w+)(.+)$/;
if(u1.test(name1)){
return true;
} else {
document.getElementById("p1").innerHTML= "Invalid Input";
name1.focus();
return false;
}
}
您不需要调用name1
上的value
属性,因为您在检索值时已经调用了该属性。
我还提供了一个优化的代码:
function user(){
var name1=document.getElementById("user").value;
if(!/ˆ(\w+)(.+)$/.test(name1)) {
document.getElementById("p1").innerHTML= "Invalid Input";
name1.focus();
return false;
}
return true;
}
关于你的正则表达式,据我所知,你不需要在名字的开头有任何特殊字符。所以我使用\w
只匹配单词([a-Z]
)。如果您还可以使用负前瞻来确保字符串不以任何特殊字符开头。是一个用于测试您的案例的regex101
负前瞻看起来像这样(?![$%?&*])(.+)$
是一个具有负前瞻性的示例
/^[a-zA-Z]$/
表示它是一个字母(总计)。您可能缺少“以后的任何事情”部分,例如*
,/^[a-zA-Z].*$/
。还要注意,RegExp.prototype.test
可能比match
更适合此任务。是您的朋友或者,您也可以删除“字符串结尾”并使用/^[a-zA-Z]/
。您的问题是,您是在按顺序显式地说“字符串的开头”、“一个字母”、“字符串的结尾”。@ASDFGerte您能在这段代码中帮助使用这个Reg.prototype.test函数吗?match
在这种情况下只会产生开销,但不会产生不同的结果。因此,虽然在这里使用test
稍微更合适一些,但它不会改变代码是否工作。match
在没有匹配时将返回null
,因此将以相同的方式工作,同时可能会为创建结果产生稍多的开销。@ASDFGerte是的,我认为您是在编写。它没有显示任何结果。@user22226但是,他所说的第二点应该是正确的,我想知道为什么您的原始代码没有任何异常(我猜您有,但从未费心检查;)@Nicolas我感谢您的努力。但有趣的是,我的浏览器没有显示任何内容。当我点击提交时,所有文本都消失了。它在正确或错误条件下没有响应。我的代码中可能有错误,请检查控制台