我正在使用
^(?=^.{14,30}$)(?=^.[\d]{3}$)(?=^.[a-z]{4}$)(?=^.[A-Z]{5}$)(?=^.[!*&#$%^]{2}).$
正则表达式以验证以下最低要求:
但是不幸的是,这种验证模式无法验证我的字符串。
我一直在寻找regex
模式验证,并认为该模式还可以
有人可以给我支持吗?
答案 0 :(得分:2)
请注意,(?=^.[a-z]{4}$)
需要匹配5个字符的字符串,其中第一个csn是任何字符,然后必须有4个小写字母。最后,在^
之后,在.
前面有$
,因此实际上,整个正则表达式可以匹配单个字符字符串。
您可以使用
^(?=(?:\D*\d){3})(?=(?:[^a-z]*[a-z]){4})(?=(?:[^A-Z]*[A-Z]){5})(?=(?:[^!*&#$%^]*[!*&#$%^]){2}).{8,30}$
请参见regex demo。 regulex graph:
详细信息
^
-字符串的开头(?=(?:\D*\d){3})
-出现3个任意0+非数字后跟数字(?=(?:[^a-z]*[a-z]){4})
-除小写ASCII字母后跟小写ASCII字母之外的任何0+字符的四次出现(?=(?:[^A-Z]*[A-Z]){5})
-除大写ASCII字母后跟大写ASCII字母(?=(?:[^!*&#$%^]*[!*&#$%^]){2})
-除某些特定的特殊字符(在字符类中定义)外,两次出现任何0+字符,后跟来自分隔的!*&#$%^
集.{8,30}
-任意8到30个字符$
-字符串的结尾。答案 1 :(得分:0)
^(?=.{14,30}$)(?=(?:.*[A-Z]){5})(?=(?:.*[a-z]){4})(?=(?:.*\d){3})(?=(?:.*[!*&#$%^]){2}).*$
└─────┬─────┘└───────┬────────┘└───────┬────────┘└──────┬──────┘└─────────┬──────────┘
│ │ │ │ │
│ │ │ │ 2 special characters
│ │ │ │
│ │ │ 3 digits
│ │ │
│ │ 4 lowercase letters
│ │
│ 5 uppercase letters
│
string is 14-30 characters long
^(?=(?:.*[A-Z]){5})(?=(?:.*[a-z]){4})(?=(?:.*\d){3})(?=(?:.*[!*&#$%^]){2}).(14,30)$
└───────┬────────┘└───────┬────────┘└──────┬──────┘└─────────┬──────────┘
│ │ │ │
│ │ │ 2 special characters
│ │ │
│ │ 3 digits
│ │
│ 4 lowercase letters
│
5 uppercase letters
答案 2 :(得分:0)
代替一些可能难以维护的正则表达式,如何处理一些易于阅读和修改的简单代码:
Private Function IsStringValid(s As String) As Boolean
If (s.Length > 30) OrElse (s.Length < 14) Then
Return False
End If
Dim lower, upper, digit, special As Integer
For Each c As Char In s
Select Case True
Case Char.IsLower(c)
lower += 1
Case Char.IsUpper(c)
upper += 1
Case Char.IsDigit(c)
digit += 1
Case Char.IsSymbol(c) OrElse Char.IsPunctuation(c)
special += 1
End Select
Next
Return (lower >= 4) AndAlso (upper >= 5) AndAlso (digit >= 3) AndAlso (special >= 2)
End Function
根据您的要求,最小长度必须为14。