首页 文章

密码的正则表达式:“Atleast 1个字母,1个数字,1个特殊字符,不应该以特殊字符开头”

提问于
浏览
9

我需要一个密码字段的正则表达式 .

要求是:

  • 密码长度必须为8到20个字符

  • 必须至少包含 one letterone number 以及 !@#$%^&*()_+ 中的特殊字符 .

  • Should not start with a special character

我试过了

^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d!@#$%^&*()_+]{8,20}

它有效,但是如何限制特殊字符开始密码?此外,如果你有一个比上面提到的更有效的正则表达式,请建议 .

谢谢

1 回答

  • 11

    它很简单,只需在开头添加一个字符类

    ^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d][A-Za-z\d!@#$%^&*()_+]{7,19}$
    
    • [A-Za-z\d] 确保第一个字符是字母或数字 .

    • [A-Za-z\d!@#$%^&*()_+]{7,19} 将匹配最小7个最多19个字符 . 这是必需的,因为他先前的字符类将使用单个字符,使字符串中的字符总数最小为8,最大为20 .

    • $ 将正则表达式锚定在字符串的末尾 . 确保我们没有任何内容 valid password

    Regex Demo

    var pattern = new RegExp(/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d][A-Za-z\d!@#$%^&*()_+]{7,19}$/);
    
    console.log( pattern.test("!@#123asdf!@#") );
    => false
    
    console.log( pattern.test("123asdf!@#") );
    => true
    
    console.log( pattern.test("12as#") );
    => false
    

相关问题