Just for fun, I tried to tackle your problem without using regular expressions.
I have the following method which checks if a string value contains characters that correspond to specified unicode categories (uppercase, lowercase, digit...)
Private Function IsValid(ByVal value As String, _
ByVal ParamArray categories As UnicodeCategory()) _
As Boolean
''//Create a hashset with valid unicode categories
Dim validSet = New HashSet(Of UnicodeCategory)(categories)
''//Group the string value's characters by unicode category
Dim groupedCharacters = value.GroupBy(Function(c) Char.GetUnicodeCategory(c))
''//Get an enumerable of categories contained in the string value
Dim actualCategories = groupedCharacters.Select(Function(group) group.Key)
''//Return true if the actual categories correspond
''//to the array of valid categories
Return validSet.SetEquals(actualCategories)
End Function
The method can be used this way:
Dim myString As String = "aAbbC"
Dim validString As Boolean = IsValid(myString, _
UnicodeCategory.LowercaseLetter, _
UnicodeCategory.UppercaseLetter)
Using this method, you can allow uppercase, lowercase AND digit characters without changing anything. Just add a third argument to IsValid: UnicodeCategory.DecimalDigitNumber