我正在尝试编写一个可以匹配任何语言密码的模式。
匹配器要求如下:
- 至少1个大写字母
- 至少1个小写字母
- 至少1个数字
- 至少1个符号
- 长度为8个字符或以上
从下面的模式中,您可以看出我很困惑!
/^(?=.*[\p{Ll}])(?=.*[\p{Lu}])(?=.*\p{Nd})(?=.*[@$!%*?&])[\p{Lu}\p{Ll}\p{Nd}$@$!%*?&]{8,}$/u
测试字符串
- 关键字157aA$89
- P455word123!
我正在尝试编写一个可以匹配任何语言密码的模式。
匹配器要求如下:
从下面的模式中,您可以看出我很困惑!
/^(?=.*[\p{Ll}])(?=.*[\p{Lu}])(?=.*\p{Nd})(?=.*[@$!%*?&])[\p{Lu}\p{Ll}\p{Nd}$@$!%*?&]{8,}$/u
测试字符串
\p{Lu}
匹配大写Unicode字母,\p{Ll}
匹配小写Unicode字母。汉字不分大小写,可以与\p{L}
(与所有其他字母一起)匹配。
在消费部分使用\p{L}
:
/^(?=.*\p{Ll})(?=.*\p{Lu})(?=.*\p{Nd})(?=.*[@$!%*?&])[\p{L}\p{Nd}@$!%*?&]{8,}$/u
^^^^^
查看此正则表达式演示。
请注意,密码仍必须包含大写和小写字母。如果您只想要求一个中文字符或大小写字母中的一个大写字母,请使用
/^(?:(?=.*\p{Han})|(?=.*\p{Ll})(?=.*\p{Lu}))(?=.*\p{Nd})(?=.*[@$!%*?&])[\p{L}\p{Nd}$@!%*?&]{8,}$/u
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这里的(?:(?=.*\p{Han})|(?=.*\p{Ll})(?=.*\p{Lu}))
需要包含中文字符(\p{Han}
)或大小写字母。