*Antes de prosseguir, certifique-se de já ter criado o campo personalizado em seu WHMCS.
- Faça login em seu WHMCS
- Clique em: Opções > Campos Personalizados
- Crie os campos p/ CPF/CNPJ(caso eles não existam)
- Coloque o código no campo de VALIDAÇÃO - String de Validação de Expressão Regular
Expressão regular para validar um campo que aceita CPF ou CNPJ (sem cálculo dos dígitos verificadores):
Esse código, inserido no campo correspondente à solicitação de CPF/CNPJ no WHMCS > Campos Personalizados, valida as inserções de números e/ou traços:/^([0-9]{3}\.?[0-9]{3}\.?[0-9]{3}\-?[0-9]{2}|[0-9]{2}\.?[0-9]{3}\.?[0-9]{3}\/?[0-9]{4}\-?[0-9]{2})$/
ENTENDA COMO FUNCIONA:
Ela pode ser entendida assim (onde "cpf" é a expressão para validar CPF e "cnpj" é a expressão para validar CNPJ):
/^(cpf|cnpj)$/
As barras inicial e final (/) não fazem parte da expressão propriamente dita - são apenas delimitadores. O caracter ^ no começo e o caracter $ no final exigem que o conteúdo completo do string a ser validado corresponda à expressão entre os mesmos. Os parênteses contendo a barra vertical (a|b)criam uma "opção" alternativa entre "a" e "b". Satisfazendo qualquer uma das duas expressões, o resultado será positivo. No lugar de "a" e "b", temos então as expressões específicas para CPF e CNPJ, separadamente.
Para CPF:
[0-9]{3}\.?[0-9]{3}\.?[0-9]{3}\-?[0-9]{2}
A interrogação (?) faz com que a especificação de caractere precedente seja opcional. Portanto os pontos e o tracinho são opcionais. A classe de caracteres [0-9] representa qualquer caracter de 0 a 9 (poderíamos usar \d, mas eu prefiro [0-9] por ser mais legível). Finalmente, o número entre colchetes ({3}) determina uma quantidade específica de vezes que a especificação de caractere precedente deve se repetir. Assim sendo, são requeridos no total 11 caracteres numéricos (3 + 3 + 3 + 2).
Para CNPJ, a estrutura é semelhante:
[0-9]{2}\.?[0-9]{3}\.?[0-9]{3}\/?[0-9]{4}\-?[0-9]{2}
Aqui são requeridos no total 14 caracteres numéricos (2 + 3 + 3 + 4 + 2).
Lembrando que a barra invertida (\) antes do ponto (.) e outros caracteres especiais é um caracter de "escape", que serve para desconsiderar a interpretação especial do caractere seguinte e considerá-lo literalmente. (O ponto, sem "escape", significa "qualquer caractere". Com "escape", significa meramente o caractere "ponto" mesmo.)
Para saber se é CPF ou CNPJ (opcional):
No lado do servidor, em PHP, é feita a seleção entre CPF ou CNPJ considerando o número de dígitos presentes no campo:$numeros = preg_replace('/[^0-9]/', '', $valor); if (strlen($numeros) == 11) { $cliente->cpf = $valor; } elseif (strlen($numbers) == 14) { $cliente->cnpj = $valor; }
Observação: isso não substitui a validação feita pela expressão regular que vimos acima, a qual também é realizada no lado do servidor (no meu caso as regras estão embutidas no modelo, com as mesmas expressões regulares de validação que vimos acima para CPF e CNPJ, só que separadas - cada qual em seu respectivo campo).
Caso queira validar mais campos, leia a documentação do WHMCS em:https://docs.whmcs.com/Custom_Fields#Regular_Expression_Validation