Samuel Volpato 4 Denunciar post Postado Maio 18, 2012 <?php $test = '134.123.456.00'; function ponto_centavos($posicao,$operador,$string) { $string = str_replace('.','',$string); $string = str_replace(',','',$string); $temp = substr($string,$posicao); $saida = substr_replace($string,"$operador",$posicao); $saida .= $temp; return $saida; } print ponto_centavos(-2,".",$test); // colocar o ponto no lugar dos centavos //retornará 134123456.00 ?> Cara não seria mais fácil retirar todos os '.' e depois dividir por 100? $test = '134.123.456.00'; $test = str_replace('.','',$test); $test = $test/100; Depois se for preciso usa number_format do próprio php pra formatar. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Maio 18, 2012 @Carcleo Esse script foi desenvolvido com base nas informações que você passou, resolve o seu problema com CNPJ, CPF e valores monetários. <html> <head> <title>Test Mask</title> <script type="text/javascript"> function Mask( obj ) { var object = this; this.money = function( obj, symbol, decimal, thousands ) { obj.value = symbol + ' ' + obj.value .replace( /\D/g, '' ) .replace( /(\d)(\d{8})$/, '$1' + thousands + '$2' ) .replace( /(\d)(\d{5})$/, '$1' + thousands + '$2' ) .replace( /(\d)(\d{2})$/, '$1' + decimal + '$2' ); setTimeout( this.object.money( obj ), 1 ); } this.cpf = function( obj ) { obj.value = obj.value .replace( /\D/g, '' ) .replace( /(\d{3})(\d)/, '$1.$2' ) .replace( /(\d{3})(\d)/, '$1.$2' ) .replace( /(\d{3})(\d{1,2})$/, '$1-$2' ); setTimeout( this.object.cpf( obj ), 1 ); } this.cnpj = function( obj ) { obj.value = obj.value .replace( /\D/g, '' ) .replace( /^(\d{2})(\d)/, '$1.$2' ) .replace( /^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3' ) .replace( /\.(\d{3})(\d)/, '.$1/$2' ) .replace( /(\d{4})(\d)/, '$1-$2' ); setTimeout( this.object.cnpj( obj ), 1 ); } } var mask = new Mask( ); </script> </head> <body> <form method="post" action=""> <label>Valor: </label> <input type="text" name="money" onkeyup="mask.money( this, 'R$', ',', '.' );" onfocus="this.value='R$ '" maxlength="14" /> <label>CPF: </label> <input type="text" name="cpf" onkeyup="mask.cpf( this );" maxlength="14" /> <label>CNPJ: </label> <input type="text" name="cnpj" onkeyup="mask.cnpj( this );" maxlength="18" /> <br/> <button type="submit">Send</button> </form> <?php if( $_SERVER[ 'REQUEST_METHOD' ] == 'POST' ) { echo '<pre>'; var_dump( ltrim( str_replace( array( '.', ',' ), array( null, '.' ), $_POST[ 'money' ] ), 'R$ ' ), $_POST[ 'cpf' ], $_POST[ 'cnpj' ] ); echo '</pre>'; } ?> </body> </html> Caso você precise de outras máscaras, é só adicionar na classe e pronto. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Maio 18, 2012 Mas, onde será que pode estar o erro (na mascara que postei acima) que esta bloqueando o uso de maxLength no campo texto? Cara não seria mais fácil retirar todos os '.' e depois dividir por 100? $test = '134.123.456.00'; $test = str_replace('.','',$test); $test = $test/100; Depois se for preciso usa number_format do próprio php pra formatar. Se for numeros sim. Mas se for string de texto.......... Mas gostei da ideia. No que estou trabalhando serve bem. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Maio 18, 2012 Como eu faço para, após submetido o form, retirar esses pontos mas deixar apenas os pontoa doa centavos? Eu li tudo, e vi que ninguém chegou a uma solução simples... Pelo menos pelo o que eu li. Se a ideia é deixar somente o ponto dos centavos, no PHP, a solução, talvez não a mais simples, mas com pouco código e funcional, seria: //sete mil, quinhentos e oitenta e três reais e trinta e sete centavos. //Indiferente possuir R$ ou não, vai funcionar. //Sim, eu escrevi para entenderem corretamente o valor $valor = 'R$ 7.583.37'; $valor = preg_replace( '/\D/', '', $valor );//Remove tudo que não é digito $valor = preg_replace( '/^([\d]+)([\d]{2})$/', '${1}.${2}', $valor );//Coloca um ponto para separar as casas dos centavos. var_dump( $valor ); A saída será: string '7583.37' (length=7) Não era isso que deseja? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Maio 18, 2012 Sim era. Mas, como encontrei um jeito de fazer que eu domino um pouco mais, preferi ele. Agora, só preciso arranjar um jeito de fazer aquela mascar javascript deixar eu usar maxLenght no campo de texto. Compartilhar este post Link para o post Compartilhar em outros sites