我正在尝试创建具有以下要求的密码字段。
至少8个字符
最多16个字符
必须包含一个数字或特殊字符
只能使用以下特殊字符:
,` ~!@#$%^&;*);'[]"。
我阅读了这个堆栈溢出问题,并试图跟踪示例中发生的事情。这就是我想到的:
^[a-zA-Z](?=.*[0-9.,`~!@#$%^&*\);'\[\]"\{\}.]).{8,16}+
这就是我使用模式的方式:
然而,这个regex表达式似乎没有按预期工作。如果我输入"密码",它将被拒绝。相反,接受这个字符串。如果有人能帮我一把,我会非常感激的。
是否有创建密码字段并使用regex的代码?
为什么你的regex一开始就有[a-zA-Z]?您不需要字符串以ASCII字母开头。
密码字段只是表单中的一个输入字段。我刚才在我原来的帖子里加了一个例子。
"我正试图创建一个具有以下要求的密码字段"-请不要这样做。没有什么比偏离我通常创建密码的"方案"更烦人的了,仅仅是因为一些网站认为它更了解"安全性"是什么…
以下是如何使用pattern属性:
input:valid {
color: green;
}
input:invalid {
color: red;
}
您只需要在字符类中"转义"双引号作为\x22和]符号。
由于默认情况下会锚定pattern,因此不需要锚定。
注意,{8,16}+是一个在js regex中不支持的所有格限制量词,忽略+。&可以用作文字。单撇号也一样。双引号需要像\x22那样"规范化"。这里不需要^和$,模式后来被^(?:和)包围。
在模式中使用此regex以确保密码同时包含字母和数字/符号:
^(?=.*[a-z])(?=.*[\d,`~!@#$%^&*);'[\]\x22{}]).{8,16}$
可能会有进一步的改进。
下面的代码将根据您的规则检查您的密码(尽管在2个regex中)
var psw = 'yourPas$word';
if (
// ensure the length is between 8 & 16
/^.{8,16}$/.test(psw) &&
// ensure the presence of a special char
/^.*[,`~!@#$%^&*);'\[\]"{}.].*$/.test(psw)
) {
console.log('hurray is valid');
} else {
console.log('booo');
}
感谢您的回复,Matyas!是否可以在一行中作为一个输入模式来执行此操作?例:。