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 trhrh
está 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 Brian
correspondia a [:lower:]
while cats
não, o que deve fazer sentido agora. Em uma edição, você alterou a expressão para a correta [[:lower:]]
e cats
agora 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 bash
també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"