Como fazer com que minha expressão regular aceite zeros na entrada?

0

Eu escrevi um regex que aceita números entre 0 e 999.999.999.999,99. As vírgulas são opcionais, mas, ainda assim, devem aceitar valores não superiores a 999999999999.99. Eu escrevi um, mas há duas falhas nele.

(^[1-9][0-9,]{0,14}(\.[0-9]{1,2})?$)
  1. Aceitar zeros Portanto, 0,00 é válido, mas 00,00 ou 00,00 não é válido.
  2. Não aceite valor superior a 999.999.999.999,99 sem vírgulas.

Como posso fazer isso? Estou testando com regex101.com pcre (php).

    
por would_like_to_be_anon 21.11.2014 / 21:41

2 respostas

1

Conteúdo do arquivo de teste:

start cmd:> cat file
999,999,999,999.99
999999999999.99
9,999,999,999,999.99
9999999999999.99
0
0.00
00
00.00

grep -E '^(0|0\.[0-9]{1,2}|'\
'[1-9][0-9]{0,2}(,?[0-9][0-9][0-9]){0,3}(\.[0-9]{1,2})?|'\
'[1-9][0-9]{0,2}(,[0-9][0-9][0-9])*(\.[0-9]{1,2})?)$' file
999,999,999,999.99
999999999999.99
9,999,999,999,999.99
0
0.00
    
por 22.11.2014 / 02:12
0

Não é uma boa idéia validar um intervalo de numeração baseado em regex, mas se você ainda insistir abaixo do regex, poderá ser usado. Não coincide se os números tiverem uma vírgula. Você pode remover a vírgula antes de fazer essa correspondência de expressão regular.

^(:?(?=[1])(10{0,11})|(?=[^0])(\d{1,12})|0)\.[0-9]{1,2}$

Você pode conferir em regex101 .

    
por 22.11.2014 / 04:41