2009-07-20 19 views
5

Estoy tratando de escribir una coincidencia de cadena de expresiones regulares en vb.net. La condición que estoy tratando de implementar es que la cadena debe contener solo alfabetos y debe contener al menos una letra de letras mayúsculas y minúsculas. es decir, AAA-falla, aaa-falla, aAa-pasa.Expresión regular para que coincida con la cadena alfabética y requiera al menos una letra mayúscula y una minúscula (vb.net)

La expresión regular que he llegado con ^(([a-z]+[A-Z]+)+|([A-Z]+[a-z]+)+)$ es

Puede alguien sugerir algunas expresión mejor/más simple regular para la misma?

+0

¿Qué sucede si quiero generalizarlo un poco más, como en decir ahora quiero una cadena que debe tener az AZ, 0-9 y! @ # $ .. y debe tener los cuatro y ningún otro personaje. ¿Debo escribir toda la permutación en la expresión regular? – Shailendra

Respuesta

4

La expresión regular que creó fallará bajo ciertas condiciones, como "aAb". Creo que el siguiente va a funcionar mejor para usted:

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

No, no fallará en 'aAb'. Sugiero que intentes ejecutarlo. – RaYell

+0

Mi comentario fue sobre la expresión original de Shail, no la tuya. Tu solución es correcta – Templar

+0

Oh, lo siento entonces. Noté que fue agregado unos minutos después del mío, así que pensé que te estabas refiriendo a eso. – RaYell

4

Esta expresión regular funcionará para usted:

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

Explicación: si la cadena debe tener al menos una minúscula y una letra en mayúscula hay un punto en letras mayúsculas y minúsculas son uno junto al otro. Este lugar se corresponde con ([AZ] [az] | [az] [AZ]) y coincide con ambos casos: uno donde el carácter en mayúscula es el primero y el segundo, luego, si cumple este criterio, solo puede agregar un número arbitrario de letras mayúsculas y minúsculas en cualquier extremo de la cadena y seguirá coincidiendo con

1

Sólo por diversión, he intentado hacer frente a su problema sin el uso de expresiones regulares.

tengo el siguiente método que comprueba si un valor de cadena contiene caracteres que corresponden a las categorías de Unicode especificado (mayúsculas, minúsculas, dígitos ...)

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 

El método puede ser utilizado de esta manera:

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

Al usar este método, puede permitir caracteres en mayúsculas, minúsculas y dígitos sin cambiar nada. Simplemente agregue un tercer argumento a IsValid: UnicodeCategory.DecimalDigitNumber

Cuestiones relacionadas