Validación de script en minúsculas Regex

Validación de script en minúsculas Regex

Estoy trabajando en una tarea para validar si una cadena ingresada está en letras minúsculas. Aquí está el script básico que nos proporcionan.

Aquí está la línea que necesito cambiar.

if [[ "$input" =~ Add your regular expression here ]]

Si pongo [a-z]ingresar algo con solo una instancia de una letra minúscula se validará. Con [[:lower:]]"Brian" validarás y "gatos" no hará más que galimatías como trhrhsi estuviera bien. No sé la expresión regular que debo usar aquí. Agradecería mucho cualquier ayuda.

Respuesta1

Pruebe si la cadena contiene algo que seanouna letra minúscula.

if [[ "$input" =~ [^[:lower:]] ]]; then
    # contains something that is not a lower case letter
else
    # contain only lower case letters
fi

o,

if ! [[ "$input" =~ [^[:lower:]] ]]; then
    # contain only lower case letters
fi

Al ^comienzo de una expresión entre corchetes se invierte el sentido de la coincidencia, de modo que [^abc]coincide con cualquier carácter individual que esténo a, b, o c.

Alternativamente, haga coincidir toda la longitud de la cuerda anclándola en ambos extremos:

if [[ "$input" =~ ^[[:lower:]]+$ ]]; then
    # contain only lower case letters
fi

Al ^principio de la expresión solo se ancla al inicio de la cadena, mientras que $al final se ancla al final de la cadena. Entre estos, solo permitimos el uso de letras minúsculas [[:lower:]]+, es decir, una o más letras minúsculas. Usar *en lugar de +permitiría que la expresión coincida exitosamente también en una cadena vacía.

Tenga en cuenta también la diferencia entre [[:lower:]](coincide con una sola letra minúscula) y [:lower:]coincide con uno de los caracteres :, l, o, w, eo r). En la pregunta original, dijiste que Briancoincidía con [:lower:]while catsno, lo que debería tener sentido ahora. En una edición, cambió la expresión a la correcta [[:lower:]]y catsahora también debería coincidir.


Con una coincidencia global implementada para la coincidencia de expresión regular:

if [[ "$input" == *[![:lower:]]* ]]; then
    # contains something that is not a lower case letter
else
    # contain only lower case letters
fi

En un patrón global, !al comienzo de una expresión entre corchetes funciona igual que ^en el caso de la expresión regular (aunque creo que bashtambién se reconoce ^allí en patrones globales).

Respuesta2

También puedes consultar con este Liner si quieres:

echo "$input" | grep -qE '^[[:lower:]]*$' && echo "All LowerCase" || echo "Not All LowerCase"

información relacionada