【问题标题】:Regex password containing two separate digits包含两个单独数字的正则表达式密码
【发布时间】:2021-08-10 15:42:45
【问题描述】:

在 JavaScript 中

至少八个字符,其中两个单独的数字,

一个大写和一个小写以及

一个特殊字符(-, @, #, $, &, *, +) 不是 /, !,?或“

尝试了很多东西,至少不能分开2位数

开始于

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[-@#$&*+]).{8,}([^\/!?"])$/

尝试了各种变化

(?=.*\d(?!\d))

(?=.*(?<!\d)\d)

请帮忙。

【问题讨论】:

    标签: javascript regex passwords


    【解决方案1】:

    关于你尝试过的模式

    • 此模式(?=.*\d(?!\d)) 匹配不直接后跟数字的数字
    • 此模式(?=.*(?&lt;!\d)\d) 匹配一个不直接以数字开头的数字

    但两种模式都不能确保实际上有 2 位数字


    您可以断言一个数字,至少一个非数字,然后再声明一个数字。

    由于您不想匹配此字符类[^\/!?"] 中的任何一个,您可以从模式中省略它,而只匹配允许的字符,因为. 匹配任何字符。

     ^(?=.*\d[^\d\n]+\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[-@#$&*+])[-@#$&*+\dA-Za-z]{8,}$
    
    • ^ 字符串开始
    • (?=.*\d[^\d\n]+\d) 断言 2 个单独的数字
    • (?=.*[a-z]) 断言一个字符 a-z
    • (?=.*[A-Z]) 断言一个字符 A-Z
    • (?=.*[-@#$&amp;*+]) 断言被认为是特殊的字符之一
    • [-@#$&amp;*+\dA-Za-z]{8,} 匹配任何允许的字符 8 次或更多次
    • $字符串结束

    Regex demo

    或者使用contrastnegated character classes 的变体:

    ^(?=.*\d[^\d\n]+\d)(?=[^a-z\n]*[a-z])(?=[^A-Z\n]*[A-Z])(?=[^-@#$&*+\n]*[-@#$&*+])[-@#$&*+\dA-Za-z]{8,}$
    

    Regex demo

    【讨论】:

    • @ljao 欢迎您。如果任何给出的答案有助于解决问题,请通过单击左侧的 ✓ 考虑 accept an answer。请注意,您得到 2 reputation points 接受解决方案。从 15 个声望点中,您可以upvote) 给出您认为有用的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2017-02-06
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多