Opa! php máscara
Escrevi uma função para aplicar máscara em campos/valores como cpf, cnpj, data, hora, coordenadas estelares e o que desejar.
<? 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! php máscara
abs
legal ! bem simples e útil
Muito util
Muito bom!!
Parabéns pela iniciativa.
Fiquei pensando…
Em um site joomla, usando o componente RsForm, como iria trabalhar com este código no arquivo: validation.php ?
Desde já obrigado.
Thiago, obrigado pelo comentário. Cara, joomla eu só ouço dizer, nunca usei nada disso, nem joomla, drupal e os demais da categoria, logo, vou ficar devendo essa resposta.
abs
Tudo bem! Eu que agradeço…
No componente de formulário que eu utilizo (RsForm!Pro) existe um arquivo php chamdo validation.php.
É nele que estão todas as funções de validação padrão para alguns campos, como por exemplo: e-mail, telephone.
Tentei entender, mas não consigo imaginar como usar essas máscaras.
Já joguei a função “mask’, mas na hora de inserir a saída, não estou fazendo certo.
E estou procurando alguma máscara pronta para este componente, e nada.
Valeu.
Um abraço
Thiago, a máscara é melhor indicada na saída cara… Se você gravar no banco com a máscara e depois tentar usar ela também na saída vai dar erro…
Você deve gravar o valor original no banco, por exemplo uma data “01022013” grava isso no banco e somente na saída você usa a mask.
É assim que está fazendo ? Ou está mandando com máscara pro banco ? rsr s
Muito bom!
Abraço
Parabéns por compartilhar seu conhecimento!
Por favor, de que forma seria possível prever o nono número dos celulares de SP? Por exemplo: quero que a saída tenha 1 ponto no meio, tipo 12345.6789
ficaria mask($var, #####.####); porém se o cara usa Nextel, o nono número não existe e o resultado seria 12345.678
Sei que eu poderia utilizar neste caso um if, mas ficaria meio limitado. Como eu poderia fazer algo do tipo, popular os # de trás para frente. Me fiz entender?
Obrigado
Fábio, não sei bem, antes da portabilidade até seria possível pegar os prefixos das operadoras e colocar em um if/switch para saber se “não é nextel”.
Obrigado, mas resolvi de uma forma mais simples. Com um if mesmo, mas na variável da query mesmo. Utilizei um strlen pra saber se tinha 8 ou 9 dígitos. Zoado, mas resolveu bem.
Nossa, agora que entendi corretamente o que você queria fazer. ;(
Pensei que queria pegar os números com 8 dígitos e incluir o 9º.
Não sabia que os 9 números estavam sendo informados.
Achei excelente sua solução, é sem dúvida, a melhor forma de fazer.
Abraços
Muito interessante e com uma infinidade de opções de uso!
Muito bom! Valeu mestre
valewwww
Cara muito obrigado…
muito bom mesmo..
Sou novo em desenvolvimento e esse tipo de ajuda me deixa muito feliz satisfeito e com vontade de seguir o seu exemplo ajudando outras pessoas
Valeu Vini =D
Abs
Valeu amigão vou bem útil pra mim!
Muito Bom! Parabéns pelo código, inclui em meu projeto.
Obrigado 😉
Show! Parabéns!
Tá com uma falha séria, se for integer volta vazio, resolvi com $val = (string) $val;
Boa!!
Bom artigo Rafael! Quebra um bom galho!!! Grato!
Sem duvidas uma função de extrema utilidade! ainda mais que temos que sempre formatar o padrão americano!
Parabens pela sua colaboração!
Ótima função, Rafael! Obrigado por compartilhar com a comunidade.
Muito boa a sua ideia! Eu nunca havia pensado dessa forma! Abraço!
Estava à procura, achei útil demais.
Valew.
Parabéns pelo blog.
Att Código Master
http://www.codigomaster.com.br
Bacana demais! Valeu!
Parabéns!
Gostei muito da sua colaboração. Todas estas máscaras estava precisando. Foram muito úteis em meu trabalho. Obrigado mesmo!
Obrigado meu amigo, um abraço.
Pingback: [PHP] Máscara para formatar data, CPF, CNPJ, RG e qualquer outra coisa | Thaís Mizuno