Регулярное выражение, соответствующее буквенной строке и требующее как минимум одну заглавную и одну строчную буквы (vb.net) - PullRequest
5 голосов
/ 20 июля 2009

Я пытаюсь написать соответствие строки регулярного выражения в vb.net. Условие, которое я пытаюсь реализовать, состоит в том, что строка должна содержать только алфавиты и должна содержать как минимум одну букву как в нижнем, так и в верхнем регистре. то есть AAA-сбой, aaa-fail, aAaA-pass.

Регулярное выражение, которое я придумал: ^(([a-z]+[A-Z]+)+|([A-Z]+[a-z]+)+)$

Может ли кто-нибудь предложить какое-нибудь лучшее / простое регулярное выражение для того же самого?

Ответы [ 3 ]

4 голосов
/ 20 июля 2009

Регулярное выражение, которое вы создали, не будет работать при некоторых условиях, таких как «aAb». Я думаю, что следующее будет работать лучше для вас:

^(?:[a-z]+[A-Z]+|[A-Z]+[a-z]+)(?:[a-zA-Z])*$
4 голосов
/ 20 июля 2009

Этот RegEx будет работать для вас:

^[a-zA-Z]*([A-Z][a-z]|[a-z][A-Z])[a-zA-Z]*$

Объяснение: если строка должна содержать хотя бы одну строчную и одну заглавную букву, существует точка, в которой заглавные и строчные буквы располагаются рядом друг с другом. Это место соответствует ([AZ] [az] | [az] [AZ]), и это соответствует обоим случаям: тот, где символ в верхнем регистре стоит первым, а где - второй, тогда, если у вас есть этот критерий, вы можете просто добавить произвольное число в нижнем регистре в верхнем регистре символ на любом конце строки, и он все равно будет соответствовать

1 голос
/ 20 июля 2009

Ради интереса я попытался решить вашу проблему без использования регулярных выражений.

У меня есть следующий метод, который проверяет, содержит ли строковое значение символы, соответствующие указанным категориям Юникода (прописные, строчные, цифры ...)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...