[英]Javascript Regex Password validation issues
我目前正在执行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个字符时,这是不可能做到的。 这是最奇怪的事情,这种表达实际上有效!
如果有人对此有任何投入,我将不胜感激。 谢谢!
首先,每次都会出现令人讨厌的警报框,但如果您要更改它,则更改您的上下部和数字检查模式;
^.*[A-Z]{2,}.*$
^.*[0-9]{2,}.*$
^.*[a-z]{2,}.*$
您的2个大写字母,2个小写字母和2个数字格式是错误的。 您应该使用类似:
var re = /^.*([A-Z].*){2,}$/;
var re = /^.*([a-z].*){2,}$/;
var re = /^.*([0-9].*){2,}$/;
请看这个简短的演示 。
编辑 :
请注意:
\\w
您可以将有效密码字符限制为字母,数字和下划线(更多信息,请参见 )。 \\w
字符的6-10个字母的密码(例如“ abCD56-”),则会提示他“密码应介于6到10个字符之间”,而他的密码是 6-10个字符(而不是您想要的字符),因此在这种情况下,该消息可能会产生误导。 希望对您有所帮助。
您的代码中使用了一种模式,该模式与您可能的意图有所不同:
var re = /^(?=.*\d)\w{2,}$/;
前瞻(?=.*\\d)
不会占用字符串中的任何字符。 它在锚点处向前看,以匹配模式.*\\d
。 如果字符串中包含一位数字(即,任意数量的字符后跟一位数字),则lookahead将返回成功的匹配项。
从概念上讲,一旦前瞻返回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]/;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.