Я немного боролся по этому поводу:
1;
В Perl модули должны возвращать что-то истинное .
Созданное вами регулярное выражение не сработает при некоторых условиях, таких как «aAb». Я думаю, вам лучше подойдет следующий вариант:
^(?:[a-z]+[A-Z]+|[A-Z]+[a-z]+)(?:[a-zA-Z])*$
Этот RegEx будет работать для you:
^[a-zA-Z]*([A-Z][a-z]|[a-z][A-Z])[a-zA-Z]*$
Объяснение: если строка должна содержать хотя бы одну строчную и одну прописную букву, существует точка, в которой прописные и строчные буквы располагаются рядом друг с другом. Это место соответствует ([AZ] [az] | [az] [AZ]), и он соответствует обоим случаям: первый, где верхний регистр - первый, а второй - тогда, если у вас есть этот критерий, вы просто можете добавить произвольное количество строчных и прописных букв символ в любом конце строки, и он все равно будет соответствовать
Ради интереса я попытался решить вашу проблему без использования регулярных выражений.
У меня есть следующий метод, который проверяет, есть ли строковое значение содержит символы, которые соответствуют указанным категориям Unicode (верхний регистр, нижний регистр, цифра ...)
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
Метод можно использовать следующим образом:
Dim myString As String = "aAbbC"
Dim validString As Boolean = IsValid(myString, _
UnicodeCategory.LowercaseLetter, _
UnicodeCategory.UppercaseLetter)
Используя этот метод, вы можете разрешить прописные, строчные буквы И цифры, ничего не меняя . Просто добавьте третий аргумент в IsValid: UnicodeCategory.DecimalDigitNumber
)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
Этот метод можно использовать следующим образом:
Dim myString As String = "aAbbC"
Dim validString As Boolean = IsValid(myString, _
UnicodeCategory.LowercaseLetter, _
UnicodeCategory.UppercaseLetter)
Используя этот метод, вы можете разрешить прописные, строчные и цифровые символы И без каких-либо изменений. Просто добавьте третий аргумент в IsValid: UnicodeCategory.DecimalDigitNumber
)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
Этот метод можно использовать следующим образом:
Dim myString As String = "aAbbC"
Dim validString As Boolean = IsValid(myString, _
UnicodeCategory.LowercaseLetter, _
UnicodeCategory.UppercaseLetter)
Используя этот метод, вы можете разрешить прописные, строчные и цифровые символы И без каких-либо изменений. Просто добавьте третий аргумент в IsValid: UnicodeCategory.DecimalDigitNumber