Opa!
Escrevi uma função para aplicar máscara em campos/valores como cpf, cnpj, data, hora, coordenadas estelares e o que desejar.
É bem simples, estou sem sono e resolvi escrever algo, é eu gosto de escrever aqui huahuha.
Quer ver o script e eu aqui com papo de sonâmbulo… então tá!
<?
function mask($val, $mask)
{
$maskared = '';
$k = 0;
for($i = 0; $i<=strlen($mask)-1; $i++)
{
if($mask[$i] == '#')
{
if(isset($val[$k]))
$maskared .= $val[$k++];
}
else
{
if(isset($mask[$i]))
$maskared .= $mask[$i];
}
}
return $maskared;
}
?>
Exemplo de uso:
<? $cnpj = "11222333000199"; $cpf = "00100200300"; $cep = "08665110"; $data = "10102010"; echo mask($cnpj,'##.###.###/####-##'); echo mask($cpf,'###.###.###-##'); echo mask($cep,'#####-###'); echo mask($data,'##/##/####'); ?>
Saídas:
11.222.333/0001-99
001.002.003-00
08665-110
10/10/2010
A saída é exatamente como você definir com os “#”, você pode utilizar qualquer separador, qualquer caracter, ex:
<? $data = "10102010"; echo mask($data,'##/##/####'); echo mask($data,'[##][##][####]'); echo mask($data,'(##)(##)(####)'); ?>
Saídas:
10/10/2010
[10][10][2010]
(10)(10)(2010)
Exemplo esquisito que ninguém jamais utilizará:
<? $hora = "021050"; echo mask($hora,'Agora são ## horas ## minutos e ## segundos'); echo mask($hora,'##:##:##'); ?>
Saídas:
Agora são 02 horas 10 minutos e 50 segundos
02:10:50 (esse você vai usar, claro)
Enfim, desde que a quantidade de # seja igual a quantidade de números, ou seja lá o que contiver a variável, porque não se limita apenas à números, poderia ser:
<? $str = "adoleta"; echo mask($str,'#-##-##-##'); ?>
Saída: a-do-le-ta
<? $valor = "100000"; echo mask($valor,'#.###,##'); ?>
Sáida: 1.000,00
Pensou que era brincadeira o lance da coordenada estelar né ? tá bão!
<? $coord_estelar = "10100505"; echo mask($coord_estelar,'p=(#.#,#.#,#.#,#.#)'); ?>
Saída: p=(1.0,1.0,0.5,0.5)
É isso galera, sigam as estrelas!
abs
Nossa muito loko simples e direto, já tinha visto um código parecido mais esse é curto e grosso diret ao ponto muito bom.
Bem bacana esta dica, já usei e após algumas adaptações funcionou bem.
Valeu!
Realmente é muito bom. Venho acompanhando seu blog à algumas semanas e gostaria de elogia-lo, pois está muito bem organizado ^^
Bom, te vejo enquando minha saga para aprender JQuery continua :D
Opa! Obrigado pelo elogio! Também sou muito fã do JQuery, tenho algumas coisas aqui para postar mas tá meio corrido para mim, entre elas tem um textarea estilo o do facebook que vai aumentando conforme a necessidade, com o essa function que fiz basta adicionar uma class css no textarea e o resto ele faz sozinho é bacana, assim que der eu vou posta-la. Abs
Show!
Boa noite !!
Esta é a primeira vez que visito este blog e gostei muito, pois tenho algumas dúvidas e as dicas do Rafael estão sendo muito importantes para mim.
Parabéns para você
Deus continue te dando esta sabedoria !!!
Muuuuuuuuuito brigado
Olá amigo, achei bastante simples seu codigo mas objetivo… tenho os dados de um telefone no banco 9681125235 quando eu puxo ele para dentro do input ele aparece assim (96) 8112-5235 usando o seu codigo… Mas eu gostaria que voce incrementasse uma solução para caixas do que estejam em branco, onde eu digite e ele já vai separando (xx) xxxx-xxxx porém ele deve salvar no banco de dados sem esses caracteres “divisores”… Se voce puder me ajudar agradeço…
Luiz, na hora de gravar no banco você precisa retirar os caracteres especiais com o preg_replace por exemplo.
ex:
$telefone = preg_replace(‘/[\(\)\-]/’,”,$telefone);
Descobri algo legal, se você usar:
$hora = array(“021050″, “1″, “2″);
echo mask($hora, ‘Agora são # horas # minutos e # segundos’);
O retorno será:
Agora são 021050 horas 1 minutos e 2 segundos
Na pratica pra valores onde o comprimento é variável , tido uma totalização de relatório, esta função não funciona …
Fábio e você poderia dar um exemplo prático que não funcione, digo, um número ou o exemplo que não funcionou para você ?
Se o comprimento é variável os parâmetros devem ser também dinâmicos, enfim, espero que possa nos informar o que não deu certo só para o seu comentário não desvalorizar a função sem antes vermos.
Abraço e obrigado por participar.
Gostei muito da sua dica.
Gostaria de saber se existe alguma maneira de fazer uma function que no momento em que eu for digitando os dados, por exemplo o CEP, ele coloque automaticamente o ” – ” após o quinto numero, somente com o PHP, sem usar javascript, para o caso da pessoa desabilitá-lo.
Um abraço
Wilson, o PHP trabalha do “lado servidor”, ou seja, só executado à partir do comento em que é enviada a consulta.
Para criar alguma interatividade com a interface deve ser uma linguagem que é executada no “lado cliente” que nesse caso pode ser o JavaScript.
Agora, o ideal é que se o usuário desativou o Javascript, então ele deverá digitar os dados com ou sem a máscara e você formata os dados no PHP ao recebe-los.
Em outras palavras para criar uma máscara enquanto o usuário digita você precisa usar linguagens no cliente (browser).
Se lhe interessar algo em js para criar na digitação veja esse link:
http://www.ajaxianos.com.br/2009/03/mascara-para-campos-de-texto-jquery/
abraços
Parabéns muito bom mesmo!
Vamos manter contato se quiser :)
Desculpa o linguajar chulo, mas essa máscara foi foda, era a solução ideal pro meu projeto pois possui código simples e limpo. Abraços.
Do caralho! Obrigado mesmo!
bom, mas se a tabela já está no formato da mask, ae ao buscar ele gera erros igual a este 01..09.8.9/83/0-00.
O ideal seria ele fazer alterarção somente nos casos que o numero estivesse sem mask ou se existir a mask, mante-la.
Nossa, tá bom de lógica em irmão!
Veja, não acha mais fácil você usar a mask apenas para inser no banco e ao ler não utiliza-la, ou então, armazenar os dados sem traços ou pontos e utilizar a mask apenas ao exibir os dados?
Verificar sem necessidade se o número está ou não com mascara sendo que eu posso ter certeza de que ele está ou não?
O ideal é saber como será gravado no banco para não precisar existir “os casos queo numero estivesse sem mask ou existir a mask, mante-la”.
Ate mais, abs
Cara… parabens pela simplicidade do código.
Muito bom.
Excelente dica! ja incorporei à minha bilbioteca de funções.
Parabéns, realmente excelente o site e principalmente esse código camaleão.
muito boa essa configuração!!!