Estou com uma dúvida para a validação de um valor string, eu tenho que pegar este valor e validar se realmente é um valor decimal com duas casas decimais.
Verifico a string com a classe regex, porém não estou conseguindo validar os dois dígitos após a vígula. Pois deve ter somente dois dígitos e não mais.
Utilizando o código abaixo, eu verifico se a string contém somente número (0-9) e após a vírgula deve ter [b]somente duas casas decimais[b]. O problema é que ele valida como correto mesmo que tenha mais que dois valores após a vírgula. Não está verificando se tem somente dois. :?
O primeiro parâmetro que o método estático matches espera receber é a expressão regular que você quer usar pra validar.
O segundo é o treco que deve ser validado. (Deu pra deduzir né?! eu sei…eu sei…)
Bom, se ficou alguma dúvida na expressão regular utilizada, é o seguinte:
\d significa o mesmo que [0-9], ou seja, qualquer dígito de 0 a 9. (OBS: é necessário colocar duas barras, uma pertence à própria expressão regular. A outra é para que o compilador não pense que se trata de uma sequência de escape inválida.
Então:
(\d)* significa um dígito, 0 ou mais vezes.
\d{2}+ significa exatamente duas vezes.
, significa ,. hehehe
Então, a minha solução a príncipio esta a msma, porém utilizei matcher.find() para verificar se estava tudo conforme padrão. Mas pelo que entendi, esse .find() só verifica se tem e não como o padrão que foi especificado.
Vou utilizar a sua solução a partir de agora, mas colocando na condição o próprio padrão, dessa maneira:
O find() serve pra você ir percorrendo a fonte a ser comparada pouco a pouco…Ou seja, ideal pra ser colocado como condição de um while…
O matches compara a fonte inteira de uma vez só…