2010-02-24 5 views
16

¿Cómo puede determinar si una cadena es mayúscula con una expresión regular? Puede incluir signos de puntuación y números, pero no letras minúsculas.Determine si la cadena es todo en mayúsculas con la expresión regular

+1

el mejor uso de una expresión regular .... –

+3

@Mitch ¿Se puede elaborar en eso? Parece un caso válido para expresiones regulares para mí. – Amarghosh

+0

¿Qué tal las líneas vacías? Algunas de las respuestas aquí los rechazan, pero es un caso interesante. – JXG

Respuesta

5

¿Por qué no usar if (string.toUpperCase() == string)? ._. Es más "elegante" ...
Creo que estás tratando de forzar en RegExp, pero como dijo otra persona, no creo que este sea el mejor uso de regexp ...

+0

¿Cómo se usa eso, por ejemplo, para extraer todas las líneas satisfactorias con un 'grep'? –

+0

string.toUpperCase() == cadena devuelve verdadero para cadenas como '@ # $%' que pueden ser o no lo que estás buscando. – rvaldron

1

La cadena contiene un letra minúscula si la expresión /[a-z]/ devuelve verdadera, así que simplemente realice esta comprobación; si es falsa, no tiene letras minúsculas.

8

Eso suena como usted quiere: ^[^a-z]*$

+0

Esto solo coincidirá con cadenas de exactamente un carácter de longitud. –

+0

@Tim: Vaya. Gracias - arregló eso. –

1

más simple parece ser:

^[^a-z]*$ 
18
m/^[^a-z]*$/ 

Para los caracteres no ingleses,

m/^[^\p{Ll}]*$/ 
+1

+1 para una solución culturalmente independiente. –

+1

Vale la pena señalar, que esto también coincidirá con cadenas sin mayúsculas y solo números, o solo puntuación, o cadenas en blanco, etc. – Totem

+0

@Tótem puede simplemente verificar la expresión regular anterior además de 'm/[a -zA-z]/' para eliminar cadena vacía/solo números/solo puntuación, etc. – OST

0

¿Qué tal (s == uppercase(s)) -> cadena es todo en mayúsculas?

0
$str="ABCcDEF"; 
if (preg_match ("/[a-z]/",$str)){ 
    echo "Lowercase found\n"; 
} 
0

Si desea hacer coincidir la cadena con otra expresión regular después de asegurarse de que no haya letras minúsculas, puede usar la búsqueda positiva hacia adelante.

^(?=[^a-z]*$)MORE_REGEX$ 

Por ejemplo, para asegurarse de que los caracteres primero y último son alfa-numérico:

^(?=[^a-z]*$)[A-Z0-9].*[A-Z0-9]$ 
probablemente no
Cuestiones relacionadas