我试图编写一个匹配任何语言密码的模式。
匹配器要求是: -
我确定你可以从下面的模式中看到,我迷路了!
/^(?=.*[\p{Ll}])(?=.*[\p{Lu}])(?=.*\p{Nd})(?=.*[@$!%*?&])[\p{Lu}\p{Ll}\p{Nd}$@$!%*?&]{8,}$/u
测试字符串
答案 0 :(得分:1)
\p{Lu}
匹配大写Unicode字母,\p{Ll}
匹配小写Unicode字母。中文字母无外壳,可以与\p{L}
(以及所有其他字母)匹配。
在消费部分中使用\p{L}
:
/^(?=.*\p{Ll})(?=.*\p{Lu})(?=.*\p{Nd})(?=.*[@$!%*?&])[\p{L}\p{Nd}@$!%*?&]{8,}$/u
^^^^^
请参阅this regex demo。
请注意,密码仍然必须包含大写和小写字母。如果您只想要一个中文字母或带小写字母的大写字母,请使用
/^(?:(?=.*\p{Han})|(?=.*\p{Ll})(?=.*\p{Lu}))(?=.*\p{Nd})(?=.*[@$!%*?&])[\p{L}\p{Nd}$@!%*?&]{8,}$/u
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
此处(?:(?=.*\p{Han})|(?=.*\p{Ll})(?=.*\p{Lu}))
需要中文字母(\p{Han}
)或大写+小写字母。