密码正则表达不正常

时间:2016-09-13 06:27:20

标签: regex

我正在使用

function validatePassword(password)
{
    var re = /^(?=.*[A-Za-z])(?=.*[$@.$!%*#?&0-9])[A-Za-z\d$@.$!%*#?&]{0,100}$/i;
    return re.test(password); 
} 

密码包含至少一个数字或特殊字符,如果没有任何字符,即使我给出数字或特殊字符

,它也能正常工作至少一个字符

1 个答案:

答案 0 :(得分:2)

/^(?=.*[A-Za-z])(?=.*[$@.$!%*#?&0-9])[A-Za-z\d$@.$!%*#?&]{8,15}$/i匹配

  • ^ - 字符串开头
  • (?=.*[A-Za-z]) - 行
  • 中至少需要一个ASCII字母
  • (?=.*[$@.$!%*#?&0-9]) - 需要一个数字或一些特殊符号。
  • [A-Za-z\d$@.$!%*#?&]{8,15} - 8到15个字母,数字和指定的特殊符号
  • $ - 字符串结尾
  • /i - 不区分大小写的匹配

(?=.*[A-Za-z])前瞻需要一封信。如果您不需要,请删除此前瞻。

使用

/^(?=.*[$@.!%*#?&0-9])[A-Za-z\d@.$!%*#?&]{8,15}$/i

或者 - 如果密码必须包含至少一个数字和一个特殊字符

/^(?=[^0-9]*[0-9])(?=[^$@.!%*#?&]*[$@.!%*#?&])[a-z0-9@.$!%*#?&]{8,15}$/i

其中(?=.*[$@.!%*#?&0-9])分为2个前瞻:(?=[^0-9]*[0-9])需要至少1个数字,(?=[^$@.!%*#?&]*[$@.!%*#?&])需要指定集合中至少一个特殊符号。

演示:

function validatePassword(password)
{
    var re = /^(?=[^0-9]*[0-9])(?=[^$@.!%*#?&]*[$@.!%*#?&])[a-z0-9@.$!%*#?&]{8,15}$/i;
    return re.test(password); 
}
console.log(validatePassword("password"));
console.log(validatePassword("12345678"));
console.log(validatePassword("12345678moreWords"));
console.log(validatePassword("12468word!"));