通过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我感谢您的努力。但有趣的是,我的浏览器没有显示任何内容。当我点击提交时,所有文本都消失了。它在正确或错误条件下没有响应。我的代码中可能有错误,请检查控制台