正则表达式 - 国际密码匹配表达式

3

我正在尝试编写一个可以匹配任何语言密码的模式。

匹配器要求如下:

  • 至少1个大写字母
  • 至少1个小写字母
  • 至少1个数字
  • 至少1个符号
  • 长度为8个字符或以上

从下面的模式中,您可以看出我很困惑!

/^(?=.*[\p{Ll}])(?=.*[\p{Lu}])(?=.*\p{Nd})(?=.*[@$!%*?&])[\p{Lu}\p{Ll}\p{Nd}$@$!%*?&]{8,}$/u

测试字符串

  1. 关键字157aA$89
  2. P455word123!
1个回答

3

\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})或大小写字母。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接