Javascript 为什么我的可选角色没有被抓到?
我正在尝试创建一个正则表达式来测试密码。我的当前版本检查以下各项:Javascript 为什么我的可选角色没有被抓到?,javascript,regex,Javascript,Regex,我正在尝试创建一个正则表达式来测试密码。我的当前版本检查以下各项: 一个大写字母 一个小写字母 一个数字 目前,用户无法输入特殊字符,但我尝试将其作为可选检查添加(因此Testing1和Testing1!应该都匹配)。我试过: ^(?=.[A-Za-z])(?=.*\d)(?=.[$$!%*.*?&])(A-Za-z\d[$$!%*.*.?&]){8,}$ 但它没有抓住它。我感觉我的特殊角色集放错了地方,但我不确定该放在哪里 我在哪里添加特殊字符列表作为可选检查?有许多方法可以设置正则表达式
- 一个大写字母
- 一个小写字母
- 一个数字
^(?=.[A-Za-z])(?=.*\d)(?=.[$$!%*.*?&])(A-Za-z\d[$$!%*.*.?&]){8,}$
但它没有抓住它。我感觉我的特殊角色集放错了地方,但我不确定该放在哪里
我在哪里添加特殊字符列表作为可选检查?有许多方法可以设置正则表达式,例如为字符类型创建白名单或黑名单。这一个特别创建了一个可以使用的字符的白名单,这似乎是你正在寻找的
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9$@$!%*#?&]{8,}$
正则表达式细分:
^ // Assert position at start of the line
(?=.*[A-Z]) // First positive lookahead, makes sure a capital character exists
(?=.*[a-z]) // Make sure a lowercase character exists
(?=.*[0-9]) // Make sure a number exists
[A-Za-z0-9$@$!%*#?&] // All of the possible characters that can be typed
{8,} // 8 to infinity characters
$ // Assert position at end of line
因为您说您希望特殊字符作为可选字符,所以它们只是放在可以键入的可能字符中,但它们不会被任何正面的lookahead验证
在上查看此正则表达式的操作。请记住,在本例中,修饰符gm
用于跨行验证,在您的用例中可能应该删除
当然,您可能有理由使用“白名单”方法,但一种更常见的方法,您可能希望尝试一下,就是允许几乎任何东西(黑名单),然后验证是否满足特定标准。有许多方法可以设置正则表达式,例如创建白名单或黑名单,用于字符类型。这一个特别创建了一个可以使用的字符的白名单,这似乎是你正在寻找的
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9$@$!%*#?&]{8,}$
正则表达式细分:
^ // Assert position at start of the line
(?=.*[A-Z]) // First positive lookahead, makes sure a capital character exists
(?=.*[a-z]) // Make sure a lowercase character exists
(?=.*[0-9]) // Make sure a number exists
[A-Za-z0-9$@$!%*#?&] // All of the possible characters that can be typed
{8,} // 8 to infinity characters
$ // Assert position at end of line
因为您说您希望特殊字符作为可选字符,所以它们只是放在可以键入的可能字符中,但它们不会被任何正面的lookahead验证
在上查看此正则表达式的操作。请记住,在本例中,修饰符gm
用于跨行验证,在您的用例中可能应该删除
当然,您可能有理由使用“白名单”方法,但一种更常见的方法,您可能希望尝试一下,就是允许几乎任何东西(黑名单),然后验证是否满足特定标准。是您的第二个
$@$!%*&代码>假设也是一个字符类?是的。错误地粘贴了一个旧命令。我认为您可以允许任何带有
:^(?=.[A-Z])(?=.[A-Z])(?=.[0-9])(?=.[$@$!%*.\\\\.&])。{8,}$
的内容,但需要一个具有前瞻性的特殊字符。如果您使用[A-Za-z0-9$@$!%*.?&]{8,}
,您将无法输入say\
。您的第二个$!%*.\&代码>假设也是一个字符类?是的。错误地粘贴了一个旧命令。我认为您可以允许任何带有
:^(?=.[A-Z])(?=.[A-Z])(?=.[0-9])(?=.[$@$!%*.\\\\.&])。{8,}$
的内容,但需要一个具有前瞻性的特殊字符。如果您使用[A-Za-z0-9$@$!%*#?&]{8,}
,您将无法输入sayń
。所以我不必将这些字符定义为它们自己的可选组?我可以把它们放在我的角色集中吗?@BDD,没错。正则表达式的这部分:[A-Za-z0-9$@$!%*#?&]{8,}
是定义可键入内容的部分。在[
和]
之间定义“可能”字符,但不定义所需字符。完美。谢谢你的澄清!所以我不必将这些字符定义为它们自己的可选组?我可以把它们放在我的角色集中吗?@BDD,没错。正则表达式的这部分:[A-Za-z0-9$@$!%*#?&]{8,}
是定义可键入内容的部分。在[
和]
之间定义“可能”字符,但不定义所需字符。完美。谢谢你的澄清!