Python Regex用于显示数字,字母

我正在尝试编写正则表达式来验证令牌。

my token has a following structure

  • 3个或更多[0-9] digits
  • 5个或更多[a-z] small alpha
  • 2个或更多[#@] special characters
  • 5个或更多[A-Z] upper alpha(可选?)可能存在。

注意:可选的[A-Z]字符可能存在于某些令牌中,可能不存在于某些令牌中,当它存在于令牌中时,应在5 or more次之间。

  • 令牌长度不同于minimum of 6 to a max of 30
  

一些有效/无效匹配的示例:

token1 : t4xa@ui13p#o6
breakdown : there are 7 [a-z],2 special chracter[@#],4 digits [0-9]
VALID MATCH: True

token2: 3@piy13Qx9#13@z1337
breakdown: there are 5 [a-z],3 special character [@#],10 digits [0-9] and 1 [A-Z](which is optional)
VALID MATCH: False (because `[A-Z]` exist in token but it exist for `1` time,it should exist atleast of 5 or more.)

token3: 3@piy1ABC3Qx9#13@DEGFz1337
breakdown: there are 5[a-z],7 [A-Z],10 digits [0-9]
VALID MATCH: True
  • 到目前为止,我设法编写了一个正则表达式来验证至少一位数字,一个大写字母,至少一个小写字母,至少一个特殊字符。
^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z])(?=.*[@#])[\w\d@#]{6,30}$
hunanldxyl 回答:Python Regex用于显示数字,字母

如果存在零个或五个以上的大写字符,则可以使用正向先行声明没有大写字符或至少5次。

(?=(?:[^A-Z\s]*$|(?:[^A-Z\s]*[A-Z]){5})

您可以使用否定的字符类和量词来检查出现的次数最少。

^(?=(?:[^\d\s]*\d){3})(?=(?:[^a-z\s]*[a-z]){5})(?=(?:[^@#\s]*[@#]){2})(?=(?:[^A-Z\s]*$|(?:[^A-Z\s]*[A-Z]){5}))[\w\d@#]{6,30}$

Regex demo

本文链接:https://www.f2er.com/3132702.html

大家都在问