regexvba

vba check 3 pattern matching


I have SearchUser as input value, and want to process it differently depending on which pattern it matches:

  1. .Pattern = "^\d+$"

  2. .Pattern = "([\w\.-]+)@([\w\.-]+)\.([A-Za-z]{2,6})"

  3. .Pattern for all other values

How to implement the third case?

My code so far:

Set objRegex = CreateObject("VBScript.RegExp")
    
With objRegex
    .IgnoreCase = True
    .Pattern = "^\d+$"
    
    If .test(SearchUser) Then
        adoCommand.CommandText = "<LDAP://" & strDomain & ">;(&(objectClass=User)(employeeid=" & SearchUser & ")(memberOf=" & SearchGroup & "));employeeid;subtree"
    End If
    
    .Pattern = "([\w\.-]+)@([\w\.-]+)\.([A-Za-z]{2,6})"
    
    If .test(SearchUser) Then
        adoCommand.CommandText = "<LDAP://" & strDomain & ">;(&(objectClass=User)(userprincipalname=" & SearchUser & ")(memberOf=" & SearchGroup & "));employeeid;subtree"
    End If
End With

Solution

  • As your two first patterns are mutually exclusive (a string cannot match both), you can use an If ... ElseIf ... Else construct here.

    First, I would define this helper function:

    Function IsMatch(ByVal Target As String, ByVal Pattern As String)
        Set objRegex = CreateObject("VBScript.RegExp")
        objRegex.IgnoreCase = True
        objRegex.Pattern = Pattern
        IsMatch = objRegex.test(Target)
    End Function
    

    And then your main logic can be this:

        If IsMatch(SearchUser, "^\d+$") Then
            adoCommand.CommandText = "<LDAP://" & strDomain & ">;(&(objectClass=User)(employeeid=" & SearchUser & ")(memberOf=" & SearchGroup & "));employeeid;subtree"
        ElseIf IsMatch(SearchUser, "([\w\.-]+)@([\w\.-]+)\.([A-Za-z]{2,6})") Then
            adoCommand.CommandText = "<LDAP://" & strDomain & ">;(&(objectClass=User)(userprincipalname=" & SearchUser & ")(memberOf=" & SearchGroup & "));employeeid;subtree"
        Else
            ' Whatever you want to happen in the third case
        End If