2009-07-20 2 views
5

vb.net에서 정규 표현식 문자열 일치를 쓰려고합니다. 구현하고자하는 조건은 문자열에 영문자 만 포함하고 대문자와 소문자 모두 적어도 하나의 문자를 포함해야한다는 것입니다. 즉 AAA- 실패, AAA- 실패, AAAA- 통과.영문자와 일치하는 정규 표현식이며 대문자와 소문자가 하나 이상 필요합니다. (vb.net)

내가 함께 올라와있다 정규 표현식입니다 ^(([a-z]+[A-Z]+)+|([A-Z]+[a-z]+)+)$

사람이 같은 몇 가지 더 나은/간단한 정규 표현식을 제안 할 수 있습니까?

+0

만약 내가 그것을 더 일반적으로 litle 비트로 일반화하고 싶다면 지금 말하면 az AZ, 0-9 및! @ # $가 있어야하는 문자열이 필요합니다. 그것은 네 가지가 있고 다른 성격이 없어야합니다. 정규식에 모든 순열을 입력해야합니까? – Shailendra

답변

4

당신이 만든 정규 표현식은 "aAb"와 같은 일부 조건에서 실패합니다. 다음과 같이하면 더 잘 작동한다고 생각합니다.

^(?:[a-z]+[A-Z]+|[A-Z]+[a-z]+)(?:[a-zA-Z])*$ 
+0

아니요 'aAb'에서 실패하지 않습니다. 나는 당신이 그것을 실행해볼 것을 제안한다. – RaYell

+0

내 의견은 당신의 것이 아닌 Shail의 원래 정규식에 관한 것입니다. 해결 방법이 정확합니다. – Templar

+0

아, 미안. 나는 그것이 내게 몇 분 후에 추가되었다는 것을 알아 차렸다. 그래서 나는 당신이 그것을 언급하고 있다고 생각했다. – RaYell

4

이 정규식은 당신을 위해 작동합니다

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

설명 : 문자열이 적어도 하나의 소문자와 하나의 대문자를해야하는 경우 대문자와 소문자는 서로 옆에 지점이 있습니다. 이 장소는 ([AZ] [az] | [az] [AZ])과 일치하며 두 경우 모두 일치합니다. 하나는 대문자가 첫 번째이고 다른 하나는 두 번째 항목입니다.이 기준을 충족하면 방금 문자열의 끝에서 대문자 소문자 임의의 숫자와 일치합니다 여전히

1

재미 있기 때문에 정규식을 사용하지 않고 문제를 해결하려고했습니다.

I이 방법은이 방법을 사용할 수

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

관련 문제