-
-
Save boliveirasilva/c927811ff4a7d43a0e0c to your computer and use it in GitHub Desktop.
| <?php | |
| // A função abaixo demonstra o uso de uma expressão regular que identifica, de forma simples, telefones válidos no Brasil. | |
| // Nenhum DDD iniciado por 0 é aceito, e nenhum número de telefone pode iniciar com 0 ou 1. | |
| // Exemplos válidos: +55 (11) 98888-8888 / 9999-9999 / 21 98888-8888 / 5511988888888 | |
| function phoneValidate($phone) | |
| { | |
| $regex = '/^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)?(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/'; | |
| if (preg_match($regex, $phone) == false) { | |
| // O número não foi validado. | |
| return false; | |
| } else { | |
| // Telefone válido. | |
| return true; | |
| } | |
| } | |
| // Se o parâmetro 'matches' for utilizado, o retorno será um array com 4 campos: | |
| // - DDI | |
| // - DDD | |
| // - Primeira parte do número; | |
| // - Segunda parte do número; | |
Alguém sabe como deixar o DDD obrigatório?
@giovannicandido basta tirar o quantificador opcional (?) do grupo de DDD... O resultado será:
/^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/Montei um exemplo aqui: Regex101
No meu caso eu precisei permitir um espaço após o dígito 9 ( (xx) 9 xxxx-xxxx ). Usei seu exemplo adicionando apenas o espaço opcional e funcionou perfeitamente. Obrigado!
/^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)(?:((?:9\s?\d|[2-9])\d{3})\-?(\d{4}))$/```
Valeu mano funcionou aqui.
Obrigado ! Ajudou imenso
Muito obrigado. Adaptei para uma regra (Rules) de validação no Laravel:
0; return preg_match('/^(?:(?:\+|00)?(55)\s?)?(?:\(?([1-9][0-9])\)?\s?)?(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/', $value); } public function message() { return 'O campo :attribute não é um telefone com DDD válido.'; } }Muito obrigado, amigo. Ajudou muito!
Fiz uma pequena adaptação para, se for usado o '(' inicial ou final no DDD, obrigar o outro também. Ficou assim:
/^(?:(?:\+|00)?(55)\s?)?(?:(?:\((\d{2})\)|\d{2})\s?)?(?:((?:9\d|[2-9])\d{3})\-?(\d{4}))$/
Obrigado @boliveirasilva, fez a boa <3