Ajuda com Exercício PHP - Teste de Conhecimento IV

PHP

22/12/2019

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

Curtidas 1

Melhor post

Ramiro Pamponet

Ramiro Pamponet

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";
}
GOSTEI 1

Mais Respostas

Fernando Junior

Fernando Junior

22/12/2019

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]\\\\
GOSTEI 0
Rodolfo Gomes

Rodolfo Gomes

22/12/2019

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!
GOSTEI 0
Ramiro Pamponet

Ramiro Pamponet

22/12/2019

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"!
GOSTEI 0
Ramiro Pamponet

Ramiro Pamponet

22/12/2019

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.
GOSTEI 0
Ramiro Pamponet

Ramiro Pamponet

22/12/2019

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.
GOSTEI 0
Rodolfo Gomes

Rodolfo Gomes

22/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";
}


Shooooow Ramiro, viu que era apenas um detalhe simples para concluir e questão. =D
GOSTEI 0
Fernando Junior

Fernando Junior

22/12/2019

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.
GOSTEI 1
POSTAR