Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Katya_crisd

Máscara Moeda com Expressão Regular

Recommended Posts

Olá pessoal, estou tentando fazer um máscara de moeda com expressão regular, o meu código está assim:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Formata</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><script>	function moeda(z){		v = z.value;		v=v.replace(/\D/g,"");		v=v.replace(/^(\d{2})(\d)/,"$1,$2");		z.value = v;	}</script><body><input type="text" name="texto" size="20" style="text-align:right" onKeyUp="moeda(this);"></body></html>

Só que a expressão pega os caracteres da esquerda para a direita, e não da direita para a esquerda... Alguém sabe como fazer ele formatar certo com a expressão regular.

 

Obs: Sei que existem funções aqui no fórum que formatam moeda, só que preciso que seja formatada com expressão regular, pois fica mais fácil de utilizar em outras linguagens específicas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Katya.

 

Estava como mesmo problema, pesquisei não achei nada.

Após dois dias fritando o cerebro cheguei a isso:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Escute Bolores</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><script>	function moeda(z){  		v = z.value;		v=v.replace(/\D/g,"")  //permite digitar apenas números	v=v.replace(/[0-9]{12}/,"inválido")   //limita pra máximo 999.999.999,99	v=v.replace(/(\d{1})(\d{8})$/,"$1.$2")  //coloca ponto antes dos últimos 8 digitos	v=v.replace(/(\d{1})(\d{5})$/,"$1.$2")  //coloca ponto antes dos últimos 5 digitos	v=v.replace(/(\d{1})(\d{1,2})$/,"$1,$2")	//coloca virgula antes dos últimos 2 digitos		z.value = v;	}</script><body>R$<input type="text" name="texto" size="11" style="text-align:right" onKeyUp="moeda(this);"></body></html>

Aqui funcionou beleza,

teste aí e posta o resultado

 

 

embolor@do

Direitos reservados a todos!!!hehehe!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia amigo eu estava com o mesmo problema que você. Queria formatar um valor monetário. Consegui resolver fazendo a seguinte expressão regular

function MaskMonetario(v){

v=v.replace(/\D/g,""); //Remove tudo o que não é dígito

v=v.replace(/(\d{2})$/,",$1"); //Coloca a virgula

v=v.replace(/(\d+)(\d{3},\d{2})$/g,"$1.$2"); //Coloca o primeiro ponto

var qtdLoop = (v.length-3)/3;

var count = 0;

while (qtdLoop > count)

{

count++;

v=v.replace(/(\d+)(\d{3}.*)/,"$1.$2"); //Coloca o resto dos pontos

}

v=v.replace(/^(0)(\d)/g,"$2"); //Coloca hífen entre o quarto e o quinto dígitos

return v;

}

Eu usei as funções do nosso amigo Elcio passando esse meu método como parametro. O site do Elcio é http://elcio.com.br/ajax/mascara/ só colocar mais essa função no código do Elcio que você vai conseguir formatar direitinho o seu campo. Haaaaa só pra te explicar uma coisa para você fazer uma expressão regular fazer a busca na sua string pelo final basta você coloca o caracter $/ no final isso delimita o fim da string. Te aconcelho a dar uma olhada no site http://www.mhavila.com.br/topicos/web/valform.html tem algumas coisinhas legai de ER

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.