Validação de script em letras minúsculas Regex

Validação de script em letras minúsculas Regex

Estou trabalhando em uma tarefa de casa para validar se uma string inserida está em letras minúsculas. Aqui está o script básico que nos é fornecido.

Aqui está a linha que preciso alterar.

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

Se eu colocar [a-z]inserir qualquer coisa com apenas uma instância de letra minúscula será validado. Com [[:lower:]]"Brian" irá validar e "gatos" não farão nada além de jargões como trhrhestá bom. Não sei o regex para usar aqui. Eu apreciaria muito qualquer ajuda.

Responder1

Teste se a string contém algo que sejanãouma letra minúscula.

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

ou,

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

O ^no início de uma expressão entre colchetes inverte o sentido da correspondência, de modo que [^abc]corresponda a qualquer caractere único que estejanão a, b, ou c.

Como alternativa, combine todo o comprimento da corda ancorando-a em ambas as extremidades:

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

O ^no início da expressão ancora apenas no início da string, enquanto o $no final ancora no final da string. Entre estas, permitimos apenas letras minúsculas usando [[:lower:]]+, ou seja, uma ou mais letras minúsculas. Usar *no lugar de +permitiria que a expressão também correspondesse com sucesso a uma string vazia.

Observe também a diferença entre [[:lower:]](corresponde a uma única letra minúscula) e [:lower:]corresponde a um dos caracteres :, l, o, w, e, ou r). Na pergunta original, você disse que Briancorrespondia a [:lower:]while catsnão, o que deve fazer sentido agora. Em uma edição, você alterou a expressão para a correta [[:lower:]]e catsagora também deve haver correspondência.


Com uma correspondência globbing em vigor para a correspondência de expressão regular:

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

Em um padrão globbing, !no início de uma expressão entre colchetes funciona da mesma forma que ^no caso de expressão regular (embora eu acredite que bashtambém reconheça ^isso em padrões globbing).

Responder2

Você também pode verificar com este Liner se quiser:

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

informação relacionada