Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho um campo no cadastro de cliente do Magento onde é aceito tanto CPF quanto CNPJ, e na área de cliente eu queria substituir os números do meio por "x" apenas por segurança, mas não tenho idéia de como fazer porque sou designer, não manjo de regex e tal. O que eu gostaria é assim:
Se for CPF, mostrar 282.xxx.xxx-88
Se for CNPJ, mostrar 51.xxx.xxx/0001-48
Eu tenho a função que faz só pra CPF, mas preciso de uma pra CNPJ, e aí eu tenho que usar a variável que pega o valor do db e identificar se é CPF ou CNPJ pelo número de caracteres. Segue abaixo a minha função pra CPF:
function mask_vat($vat) {
$pattern = '/^(\d{3}).\d{3}.\d{3}-(\d{2})$/';
$replacement = '$1.xxx.xxx-$2';
return preg_replace($pattern, $replacement, $vat);
}
Chamando a função...
<?php echo mask_vat($this->escapeHtml($this->getTaxvat())) ?>
Alguma idéia?
vlw>
15 horas atrás, joaowebdesigner disse:
function mask_vat($vat) {
$pattern = '/^(\d{3}).\d{3}.\d{3}-(\d{2})$/';
$replacement = '$1.xxx.xxx-$2';
return preg_replace($pattern, $replacement, $vat);
}
Chamando a função...
<?php echo mask_vat($this->escapeHtml($this->getTaxvat())) ?>
Alguma idéia?
vlw
Só mudar o pattern, porque desta forma esta validando algo que já foi validado.
de
$pattern = '/^(\d{3}).\d{3}.\d{3}-(\d{2})$/';
para
$pattern = '/^(\d{3})\d{3}\d{3}(\d{2})$/';
Entenda que, \d é digito, e CPF tem onze dígitos
\d\d\d\d\d\d\d\d\d\d\d
A mesma representação acima seria desta forma \d{11}, o agrupamento dos 11 dígitos dentro das chaves, ao invés de se repetir onze vezes o \d
Entendendo o pattern
'/^(\d{3})\d{3}\d{3}(\d{2})$/'
Oque esta dentro ( ) não serão substituídos por preg_replace na mascara abaixo, pois serão usadas pelas backreferences.
$replacement = '$1.xxx.xxx-$2';
$1 e $2 é as suas backreferences, ou seja, variáveis de referencia literal que foram sinalizadas por parenteses ().
Os parenteses no pattern (\d{3}) vale $1 e (\d{2}) equivalente $2 na mascara **"replacement".**
Para contar a quantidade de caracteres use [strlen](http://php.net/manual/pt_BR/function.strlen.php) e a função [preg_replace](http://php.net/manual/pt_BR/function.preg-replace.php) para remover o que não for números.
$vat = preg_replace('/[^0-9]/i', '', $vat);
if (strlen($vat) <= 11) {
$pattern = '/^(\d{3})\d{3}\d{3}(\d{2})$/';
$replacement = '$1.xxx.xxx-$2';return preg_replace($pattern, $replacement, $vat);
Sabendo oque são grupos e digitos, só montar para a CNPJEu tinha conseguido, só que na hora de salvar, o input não tava passando na validação, aí fiz usando javascript, client-side, foi o único jeito!
Valeu pelo help!!
http://php.net/manual/en/function.substr-replace.php