Regex - verificação de script para caracteres permitidos

0

Eu preciso verificar uma string e garantir que ela não contenha nenhum caractere fora da lista de caracteres fornecidos.

Eu escrevi um script para testar isso:

str="$1"

regex="^[0-9a-zA-Z\,\!\-\^\'@\{\}\[\],=\(\).;\/~_|]*$"

if [[ "$str" =~ $regex ]]
then
  echo "f yeah"
else
  echo "f you"
fi

Mas isso não parece funcionar. E parece-me que nem sequer estou perto.

Lista de caracteres permitidos é:

a-z A-Z 0-9 ' @ { } [ ] ^ , = ! ( ) . ; / ~ _ |

Não tenho certeza do que sinto falta aqui.

    
por Batty 24.11.2015 / 16:09

1 resposta

5

Você não pode incluir um ] em uma classe de caracteres por meio de barras invertidas. Deve ser o primeiro elemento da classe. O mesmo vale para o traço, mas desta vez, deve ser o último. \-\^ corresponde apenas ao intervalo de \ a \ , ou seja, a contrabarra e o contrassenso. (Eu removi barras invertidas inúteis também).

regex='^[]0-9a-zA-Z,!^'@{}=().;/~_|[-]*$'

Tem certeza de que deseja * , não + ? Você realmente quer aceitar cordas vazias?

    
por 24.11.2015 / 16:26