2009-07-20 27 views
5

vb.netで正規表現の文字列一致を作成しようとしています。私が実装しようとしている条件は、文字列にはアルファベットしか含まれておらず、大文字と小文字の少なくとも1文字を含んでいなければならないということです。 AAA-fail、aaa-fail、aAaA-passを含む。アルファベットの文字列に一致する正規表現で、少なくとも1つの大文字と1つの小文字(vb.net)が必要です

私が出ている正規表現は^(([a-z]+[A-Z]+)+|([A-Z]+[a-z]+)+)$

ある誰かが同じのためのいくつかのより良い/単純な正規表現を提案することはできますか?

+0

これを一般化したいと思うのですが、現在はaz、0-9、!@#$を持つ文字列が必要です。それは4つすべての文字を持たなくてはなりません。正規表現にすべての順列を入力する必要がありますか? – 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])と一致し、両方のケースに一致します:大文字が最初で、2番目の場合、この条件を満たすと、文字列の任意の端で大文字の小文字の任意の数とそれはまだ一致します

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 

文字列の値が指定されたUnicodeカテゴリに対応する文字を含んでいるかどうかを確認する次のような方法(大文字、小文字、数字を...):

Dim myString As String = "aAbbC" 
Dim validString As Boolean = IsValid(myString, _ 
            UnicodeCategory.LowercaseLetter, _ 
            UnicodeCategory.UppercaseLetter) 

この方法を使用すると、何も変更せずに大文字、小文字のAND桁の文字を許可できます。 IsValidに3番目の引数を追加してください:UnicodeCategory.DecimalDigitNumber

関連する問題