我正在尝试使用带有函数的正则表达式来验证密码,但它对我不起作用。任何人都可以看看缺少什么或我犯了什么错误。?
这是我的代码:
function passCheck() {
var passexp = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/;
var password = document.getElementById("password");
if (password != "") {
if (!password.match(passexp)) {
document.registration.password.focus();
document.getElementById('error2').innerHTML = "Password should be atleast 8 character long and must contain at least one digit,at least one lower case,at least one upper case.";
return false;
} else {
document.getElementById('error2').innerHTML = "";
return true;
}
} else {
document.registration.password.focus();
document.getElementById('error2').innerHTML = "Password can't be blank";
return true;
}
}

<label for="password">* Password </label>
<input type="password" name="password" placeholder="Password should be atleast 8 characters" id="password" size="40" required="required" onblur="return passCheck();"/>
<span id="error2"></span>
&#13;
修改
您好,
在同一表格中我还有其他几个字段(即姓名,电子邮件,密码,确认密码,用户名,手机号码,街道,城市,国家(选择标签),性别(单选按钮)。 现在我的问题是或者更确切地说是混淆:
我是否需要检查该字段是否为空(在客户端和服务器端),尽管使用了&#39; required&#39;属性
我为我想要验证的每个字段创建了新函数(就像passCheck()一样,它会使代码变得不必要。所以这里代码的可重用性没有完成。我还能用其他方式实现验证以实现它。它有点无聊,无法一次又一次地实现类似的逻辑或方法,只需稍作修改。
Javascript变量的名称不能与包含该变量的函数名称相同。为什么? 因为当我尝试使用相同的名称时,代码并没有起作用。但当我在 jsfiddle.net 上检查相同的代码时,它显示该变量的错误。
对于非文本字段(选择框和单选按钮)使用PHP函数(如 mysql_real_escape_string())的目的是什么。在这里,我们不允许用户输入除已定义的选项之外的任何其他内容。
保持一个单选按钮检查性别是不错的做法。
我将性别存储在数据库中,作为存储男/女的第一个字符的CHAR(1)。 如何使用ENUM存储相同内容。
答案 0 :(得分:2)
此:
var password = document.getElementById("password");
if (password != "") {
...将HTML密码输入分配给password
变量,而不是该输入的值。 (password != "")
始终为真,因为password
不是字符串,而是表单元素。
请改为尝试:
var password = document.getElementById("password").value;
答案 1 :(得分:2)
以下是您可以尝试的regular expression
。
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"
上述regex
将强制执行以下规则:
长度最少8个
&#34;(?= [AZ])(?= [AZ])(?= \ d?)。^(= [ !?$ @ $%的&安培;])[A-ZA-Z \ d $ @ $%&安培;!?] {8,}&#34;
上述regex
将强制执行以下规则:
另请查看史蒂夫关于表格不起作用的答案。
答案 2 :(得分:1)
只需将正则表达式更改为
即可^(?=.{8,})(?=.*?\d)(?=.*?[A-Z])(?=.*[a-z]).*?(?:(?!\s|\n)\W).*$
(?:(?!\s|\n)\W)
确保一个字符必须是非单词字符,而不是空格或换行符。
这不会在密码文本框中包含空格或换行符,
^(?=.{8,})(?=.*?\d)(?=.*?[A-Z])(?=.*[a-z])(?:(?!\s|\n)[\W\w])*$
答案 3 :(得分:1)
您需要区分<input>
元素及其包含的值。以下代码段包含对原始代码的一些更改。特别是,变量passwordValue
包含<input>
的文本内容,而passwordElement
是输入本身。我还在.trim()
中添加了一个输入是否为空的测试,因为这会在执行正则表达式匹配之前捕获仅包含空格的输入。
function passCheck() {
var passexp = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/;
var passwordElement = document.getElementById("password");
var passwordValue = passwordElement.value;
if (passwordValue.trim() !== "") {
if (!passwordValue.match(passexp)) {
passwordElement.focus();
document.getElementById('error2').innerHTML = "Password should be atleast 8 character long and must contain at least one digit,at least one lower case,at least one upper case.";
return false;
} else {
document.getElementById('error2').innerHTML = "";
return true;
}
} else {
passwordElement.focus();
document.getElementById('error2').innerHTML = "Password can't be blank";
return true;
}
}
&#13;
<label for="password">* Password </label>
<input type="password" name="password" placeholder="Password should be atleast 8 characters" id="password" size="40" required="required" onblur="passCheck()"/>
<span id="error2"></span>
&#13;
正如您在有关!==
运算符的评论中所述,这里有一些解释:
!==
是与===
相反的运算符,这意味着它在左侧和右侧之间进行了严格的比较。这意味着变量的类型以及值都很重要。例如,2 == "2"
将评估为true
,而2 === "2"
将评估为false
。通常认为使用严格比较是一种好习惯,因为它可以更有效地传达您想要做的事情。出于这个原因,我在您的代码中将!=
更改为!==
;它与修复问题没有直接关系。