Ir para conteúdo

Arquivado

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

Carcleo

retirar carcaters e deixar alguns

Recommended Posts

<?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

@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

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
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

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

×

Informação importante

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