Verificando numérico com decimal

1

Eu tenho uma expressão como a seguinte:

echo “B1500.00” | egrep '^[(-|+)]?[0-9]+(\.[0-9]{2})?$'

Estou verificando numérico com um decimal e, se houver algo que não seja numérico no campo, quero um erro.

Parece não cometer erros com a expressão acima. A expressão retorna como um número se eu tiver um número real como 1500.00 ou -1500.00. Tenho certeza de que há algo que estou perdendo.

    
por Gayle 22.09.2015 / 18:18

1 resposta

3

Essas aspas são caracteres unicode, que estão sendo passados para egrep como parte da expressão para corresponder.

Além disso, a primeira classe de caracteres provavelmente não é exatamente o que você deseja, tente:

echo B1500.00 | egrep '^[-+]?[0-9]+(\.[0-9]{2})?$'

que não coincide enquanto

echo 1500.00 | egrep '^[-+]?[0-9]+(\.[0-9]{2})?$'

corresponde a 1500.00

A classe de caractere I que ofereci corresponderá apenas a + ou - , enquanto a original também corresponderá a | e a abertura e fechamento de parentes, o que provavelmente não é o que você queria.

Como Costas apontou, você pode dizer a egrep que você quer combinar a linha inteira e ignorar as âncoras de início e fim da seguinte forma:

echo 1500.00 | egrep -x '[-+]?[0-9]+(\.[0-9]{2})?'
    
por 22.09.2015 / 18:35

Tags