正则表达式验证问题

时间:2019-03-23 21:09:15

标签: html regex vb.net

我正在使用

^(?=^.{14,30}$)(?=^.[\d]{3}$)(?=^.[a-z]{4}$)(?=^.[A-Z]{5}$)(?=^.[!*&#$%^]{2}).$

正则表达式以验证以下最低要求:

  1. 四个小写字母
  2. 五个大写字母
  3. 三位数
  4. 两个特殊字符
  5. 总长度在14到30个字符之间

但是不幸的是,这种验证模式无法验证我的字符串。
我一直在寻找regex模式验证,并认为该模式还可以
有人可以给我支持吗?

3 个答案:

答案 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 demoregulex graph

enter image description here

详细信息

  • ^-字符串的开头
  • (?=(?:\D*\d){3})-出现3个任意0+非数字后跟数字
  • (?=(?:[^a-z]*[a-z]){4})-除小写ASCII字母后跟小写ASCII字母之外的任何0+字符的四次出现
  • (?=(?:[^A-Z]*[A-Z]){5})-除大写ASCII字母后跟大写ASCII字母
  • 之外的任何0+字符的五次出现
  • (?=(?:[^!*&#$%^]*[!*&#$%^]){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。