Ajuda com Exercício PHP - Teste de Conhecimento IV

22/12/2019

0

PHP

Estou quebrando a cabeça (já há algum tempo) com o exercício abaixo. Preciso de uma dica de onde estou errando... (só falto esse exercício para PLATINAR a sala!)

Complete o código para verificar se o número de um celular cadastrado está no formato:

*Com nove dígitos
*E o primeiro dígito é o 9
*Sem caracteres especiais ou espaço em branco

$telefone = ''996744729'';
$qntDigitos = strlen($telefone);
$espacoVazio = 0;
$caractereEspecial = 0;

if ($qntDigitos == 9 && substr($telefone, 0, 1) == ‘9’) {
for($indice = 1; $indice <= $qntDigitos; $indice++) {
switch ($telefone[$indice]) {
case ‘ ‘:
$espacoVazio++;
break;
case ‘-‘:
$caractereEspecial++;
break;
}
}
if ($espacoVazio > 0 || $caractereEspecial > 0) {
echo "Presença de caractere especial ou espaço em branco";
} else {
echo "Número válido";
}
} else {
echo "Número invalido";
}
Ramiro Pamponet

Ramiro Pamponet

Responder

Post mais votado

26/12/2019

RESOLVIDO!

$telefone = ''996744729'';
$qntDigitos = strlen($telefone);
$espacoVazio = 0;
$caractereEspecial = 0;

if ($qntDigitos == 9 && substr($telefone, 0, 1) == ‘9’) {
for($indice = 1; $indice < $qntDigitos; $indice++) {
switch ($telefone[$indice]) {
case ‘ ‘:
$espacoVazio++;
break;

case ‘-‘:
$caractereEspecial++;
break;
}
}
if ($espacoVazio > 0 || $caractereEspecial > 0) {
echo "Presença de caractere especial ou espaço em branco";
} else {
echo "Número válido";
}
} else {
echo "Número invalido";
}

Ramiro Pamponet

Ramiro Pamponet
Responder

Mais Posts

23/12/2019

Fernando Junior

Estou quebrando a cabeça (já há algum tempo) com o exercício abaixo. Preciso de uma dica de onde estou errando... (só falto esse exercício para PLATINAR a sala!)

Complete o código para verificar se o número de um celular cadastrado está no formato:

*Com nove dígitos
*E o primeiro dígito é o 9
*Sem caracteres especiais ou espaço em branco

$telefone = ''996744729'';
$qntDigitos = strlen($telefone);
$espacoVazio = 0;
$caractereEspecial = 0;

if ($qntDigitos == 9 && substr($telefone, 0, 1) == ‘9’) {
for($indice = 1; $indice <= $qntDigitos; $indice++) {
switch ($telefone[$indice]) {
case ‘ ‘:
$espacoVazio++;
break;
case ‘-‘:
$caractereEspecial++;
break;
}
}
if ($espacoVazio > 0 || $caractereEspecial > 0) {
echo "Presença de caractere especial ou espaço em branco";
} else {
echo "Número válido";
}
} else {
echo "Número invalido";
}


Use expressões regulares. Você pode verificar o tamanho usando o strlen mesmo, mas antes aplicando um trim da vida para retirar os brancos das extremidades da cadeia de caracteres, mas depois é usar algo como

// Um número 9 seguido de oito números quaisquer ficaria algo parecido com:
\\\\9[0-9]{8]\\\\
Responder

23/12/2019

Rodolfo Gomes

Estou quebrando a cabeça (já há algum tempo) com o exercício abaixo. Preciso de uma dica de onde estou errando... (só falto esse exercício para PLATINAR a sala!)

Complete o código para verificar se o número de um celular cadastrado está no formato:

*Com nove dígitos
*E o primeiro dígito é o 9
*Sem caracteres especiais ou espaço em branco

$telefone = ''996744729'';
$qntDigitos = strlen($telefone);
$espacoVazio = 0;
$caractereEspecial = 0;

if ($qntDigitos == 9 && substr($telefone, 0, 1) == ‘9’) {
for($indice = 1; $indice <= $qntDigitos; $indice++) {
switch ($telefone[$indice]) {
case ‘ ‘:
$espacoVazio++;
break;
case ‘-‘:
$caractereEspecial++;
break;
}
}
if ($espacoVazio > 0 || $caractereEspecial > 0) {
echo "Presença de caractere especial ou espaço em branco";
} else {
echo "Número válido";
}
} else {
echo "Número invalido";
}


Fala Ramiro, tranquilo?

Shoooow o interesse por platinar a sala =D

E com certeza ajudamos quanto a isso! Vendo pelo seu código vc pegou praticamente a ideia do exercício, do seu funcionamento.

O detalhe que dará a cereja do bolo para completar esta no laço de repetição criado que percorre a string com o número de telefone.
Pois como já identificou que a primeira condição esta satisfeita ele precisa dar inicio a verificação após esse primeiro número até o seu final.

Dê uma atenção especial nessa parte que verá o passou despercebido ;)

Mas no que precisar não deixe de compartilhar

Grande abraço!
Responder

23/12/2019

Ramiro Pamponet

O detalhe que dará a cereja do bolo para completar esta no laço de repetição criado que percorre a string com o número de telefone.
Pois como já identificou que a primeira condição esta satisfeita ele precisa dar inicio a verificação após esse primeiro número até o seu final.


Boa tarde Rodolfo,

O problema está no "FOR" ou no "SWITCH"? Ainda estou "cego"!
Responder

24/12/2019

Ramiro Pamponet

Tentei a solução do Arlin Mafra, nos comentários do exercício, porém utilizando no primeiro if, na segunda condição a expressão $telefone[0] === '9' (equivalente ao substr($telefone, 0,1) === '9' para validar que o primeiro dígito tem que ser 9. Substitui o switch pelo while (depois do laço for) e dentro do bloco while segui a sugestão do Arlin Mafra novamente, utilizando o operador ternário.

while($telefone[$indice]) {
$espacoVazio ' ':
$espacoVazio++;
continue; // Caso a condição fosse falsa. (também tentei com break)

$caractereEspecial '-':
$caractereEspecial++;
continue; // Caso a condição fosse falsa. (também tentei com break)
}

Sem resultado. Preciso de ajuda para conseguir enxergar onde estou errando.
Responder

24/12/2019

Ramiro Pamponet

Use expressões regulares. Você pode verificar o tamanho usando o strlen mesmo, mas antes aplicando um trim da vida para retirar os brancos das extremidades da cadeia de caracteres, mas depois é usar algo como

// Um número 9 seguido de oito números quaisquer ficaria algo parecido com:
\\\\\\\\9[0-9]{8]\\\\\\\\


Boa Noite Fernando,

Esse recurso da expressão regular eu usaria exatamente onde? Na segunda condição do 1º if, no for, no while? Engraçado vc comentar sobre esse assunto, já que na documentação da sala não consta nada sobre expressão regular.
Responder

27/12/2019

Rodolfo Gomes

RESOLVIDO!

$telefone = ''996744729'';
$qntDigitos = strlen($telefone);
$espacoVazio = 0;
$caractereEspecial = 0;

if ($qntDigitos == 9 && substr($telefone, 0, 1) == ‘9’) {
for($indice = 1; $indice < $qntDigitos; $indice++) {
switch ($telefone[$indice]) {
case ‘ ‘:
$espacoVazio++;
break;

case ‘-‘:
$caractereEspecial++;
break;
}
}
if ($espacoVazio > 0 || $caractereEspecial > 0) {
echo "Presença de caractere especial ou espaço em branco";
} else {
echo "Número válido";
}
} else {
echo "Número invalido";
}


Shooooow Ramiro, viu que era apenas um detalhe simples para concluir e questão. =D
Responder

27/12/2019

Fernando Junior

Use expressões regulares. Você pode verificar o tamanho usando o strlen mesmo, mas antes aplicando um trim da vida para retirar os brancos das extremidades da cadeia de caracteres, mas depois é usar algo como

// Um número 9 seguido de oito números quaisquer ficaria algo parecido com:
\\\\\\\\\\\\\\\\9[0-9]{8]\\\\\\\\\\\\\\\\


Boa Noite Fernando,

Esse recurso da expressão regular eu usaria exatamente onde? Na segunda condição do 1º if, no for, no while? Engraçado vc comentar sobre esse assunto, já que na documentação da sala não consta nada sobre expressão regular.


Com a expressão regular você já saberia em uma comparação(match) se o que você tem se encaixa no que você procura. De uma tacada só você saberia se a sua string começa com 9, seguida de 8 dígitos e sem dígitos à direita ou esquerda, mas acho que invalidaria o objetivo do exercício já que é preciso mostrar os erros intermediários, o que levaria a ter que usar uma expressão regular para verificar se começa com 9, outra para ver se a string possui espaços à direita e à esquerda, outra para verificar se possui 9 caracteres e outra para verificar se são dígitos que seguem o número 9. De qualquer fora, loops não seriam necessários.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar