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

时间:2017-12-08 10:24:35

标签: regex

我试图编写一个匹配任何语言密码的模式。

匹配器要求是: -

  • 1 Upper Char(Min)
  • 1下Char(Min)
  • 1位数(分钟)
  • 1符号(最小)
  • 8个字符长度或以上

我确定你可以从下面的模式中看到,我迷路了!

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

测试字符串

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

1 个答案:

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