我目前正在进行Javascript密码控制,我必须在密码要求的每一个不匹配时发出警告,这会告诉您输入的确切错误。
我一直在尝试和尝试,但从未找到解决方案。
所以这是代码:
function checkForm(form)
{
var re = /^\w{6,10}$/;
if(!re.test(form.pwd1.value)) {
alert("Password in-between 6-10 characters");
form.inputfield.focus();
return false;
}
var re = /^[\w ]+$/;
if(!re.test(form.pwd1.value)) {
alert("You need to write something");
form.inputfield.focus();
return false;
}
var re = /^(?=.*[A-Z])\w{2,}$/;
if(!re.test(form.pwd1.value)) {
alert("At least two Upper case");
form.inputfield.focus();
return false;
}
var re = /^(?=.*[a-z])\w{2,}$/;
if(!re.test(form.pwd1.value)) {
alert(" At least two Lower Case letters");
form.inputfield.focus();
return false;
}
var re = /^(?=.*\d)\w{2,}$/;
if(!re.test(form.pwd1.value)) {
alert("At least two numbers");
form.inputfield.focus();
return false;
}
// validation was successful
else(alert("Welcome!"));
return true;
}
我的问题是控制器按每个字符的一个字符而不是两个字符来结算,但是它需要输入其中一个值中的至少两个,例如。 2x大写,2x小写或2x数字。当需要6个字符时,这是不可能的。这是最奇怪的事情,那个表达确实有效!
如果有人对此有任何意见,我真的很感激。 谢谢!
答案 0 :(得分:0)
首先,每次都要收到警报框很烦人,但如果它是你想要的,那么就改变你的上部和数字检查模式;
^.*[A-Z]{2,}.*$
^.*[0-9]{2,}.*$
^.*[a-z]{2,}.*$
答案 1 :(得分:0)
你的2-Upper-case,2-Lower-case和2-Number模式是错误的。你应该使用类似的东西:
var re = /^.*([A-Z].*){2,}$/;
var re = /^.*([a-z].*){2,}$/;
var re = /^.*([0-9].*){2,}$/;
请参阅 short demo 。
修改强>:
请注意:
\w
,您可以将有效密码字符限制为字母,数字和下划线(更多信息 here )。\w
字符的6-10字母密码(例如“abCD56-”),则会提示他“密码应介于6和6之间10个字符“,而他的密码 IS 6-10个字符(不是你想要的字符),所以在这种情况下这个消息会有点误导。我希望有所帮助。
答案 2 :(得分:0)
您在代码中使用了一种模式,它可以执行与您可能想要的操作不同的操作:
var re = /^(?=.*\d)\w{2,}$/;
前瞻(?=.*\d)
不会消耗字符串中的任何字符。它展望锚点以匹配模式.*\d
。如果字符串中有一个数字(即任意数量的字符后跟数字),前瞻将返回成功匹配。
从概念上讲,一旦前瞻返回true,解析器将尝试匹配\w{2,}$
,它匹配任意数量的单词字符(字母,数字和_
),后跟字符串的结尾。
结果是模式将匹配包含至少包含一个数字的2个或更多单词字符的任何字符串,而不是预期的两个。
作为更正,您有几种选择。由于您的第一个模式确保密码的长度合适,因此您可以将此表达式替换为:
var re = /\d.*\d/;
这将找到一个数字后跟任何字符序列,后跟另一个数字(注意删除^
和$
锚点,因为第一个数字可以出现在字符串中的任何位置)。
相同的概念可以应用于需要两个符号的其他模式:
var re = /^(?=.*[A-Z])\w{2,}$/; becomes var re = /[A-Z].*[A-Z]/;
var re = /^(?=.*[a-z])\w{2,}$/; becomes var re = /[a-z].*[a-z]/;