Jump to content

Expressão regular para validação de números de telefone


nicruo
 Share

Recommended Posts

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" name="num">
<input type="submit" value="ir">
<?php
$pattern = "/^9[1236]{1}[0-9]{7}$/";

if(!preg_match($pattern, $_POST['num'])){
echo "erro";
}
else{
echo $_POST['num'];
}

Começa no 9 pode ser seguido por 23456 (1 numero apenas) depois leva numero de 0 a 9 (+7 numeros), se colocares mais ou menos dá ERRO

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Link to comment
Share on other sites

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" name="num">
<input type="submit" value="ir">
<?php
$pattern = "/^9[1236]{1}[0-9]{7}$/";

if(!preg_match($pattern, $_POST['num'])){
   echo "erro";
}
else{
echo $_POST['num'];
}

Começa no 9 pode ser seguido por 23456 (1 numero apenas) depois leva numero de 0 a 9 (+7 numeros), se colocares mais ou menos dá ERRO

porque é q

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" name="num">
<input type="submit" value="ir">
<?php
$pattern = "/^9[1236]{1}[0-9]{7}$/";

if(!preg_match($pattern, $_POST['num'])){
   echo "erro";
}
else{
echo $_POST['num'];
}

Começa no 9 pode ser seguido por 23456 (1 numero apenas) depois leva numero de 0 a 9 (+7 numeros), se colocares mais ou menos dá ERRO

porque é q

??? o meu computador passou-se e mandou uma catrefada de posts ???!!

o que queria dizer era somente : @Nelson > e os números fixos ?

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Eu coloquei apenas o exemplo do telm mas os fixos segue o mesmo exemplo

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" name="num">
<input type="submit" value="ir">
<?php
$pattern = "/^9[1236]{1}[0-9]{7}$|^2[3-9]{2}[0-9]{6}$|^2[12]{1}[0-9]{7}$/";

if(!preg_match($pattern, $_POST['num'])){
echo "erro";
}
else{
echo $_POST['num'];
}

dá erro a indicar que falta o num mas isto serve para exemplo

Editado: coloquei na 2ª opção intervalo entre 3-9 pois fora lisboa e porto começam daí para cima

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Link to comment
Share on other sites

Eu coloquei apenas o exemplo do telm mas os fixos segue o mesmo exemplo

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" name="num">
<input type="submit" value="ir">
<?php
$pattern = "/^9[1236]{1}[0-9]{7}$|^2[3-9]{2}[0-9]{6}$|^2[12]{1}[0-9]{7}$/";

if(!preg_match($pattern, $_POST['num'])){
   echo "erro";
}
else{
echo $_POST['num'];
}

dá erro a indicar que falta o num mas isto serve para exemplo

Editado: coloquei na 2ª opção intervalo entre 3-9 pois fora lisboa e porto começam daí para cima

em que essa solução é melhor do que as apresentadas ?

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

No form podes colocar 3 opções:

Os nºs de telemóveis portugueses, 2ª - números fixos 2xx xxx xxx ou 3ª números fixos que apenas são exclusivos as Zonas de Lisboa e Porto (21 e 22)

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Link to comment
Share on other sites

No form podes colocar 3 opções:

Os nºs de telemóveis portugueses, 2ª - números fixos 2xx xxx xxx ou 3ª números fixos que apenas são exclusivos as Zonas de Lisboa e Porto (21 e 22)

e qual é a diferença dos números do porto e lisboa em relação aos outros ?

o porque da simples seguinte expressão regular não ser usada :

2[1-9]{1}[0-9]{7}

dá um caso em que a expressão regular anterior não englobe o teu 2º e 3º caso, ou aceito um número inválido que não seja aceite também na tua expressão

nota : sei perfeitamente que a expressão regular tem falhas, exemplo, 293 é um prefixo para nada, no entanto é aceite em todas as expressões regulares apresentada aqui

Edited by HappyHippyHippo
  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

A razão na altura foi devido a essa opção que apresentaste...

e não é aceite em todas pois na 3ª opção não consegues colocar 29 e só podes colocar o 21 ou 22 daí a 3ª opção .

lol realmente :-) não tinha reparado na 2ª que deixa isso acontecer ....

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Link to comment
Share on other sites

foi pedido uma expressão para números nacionais, não existe "separação" ou "opções"

pattern original

$pattern = "/9[1236][0-9]{7}|2[1-9][0-9]{7}/";

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Link to comment
Share on other sites

Acho que a expressão regular ^9[1236]{1}[0-9]{7}$|^2[3-9]{2}[0-9]{6}$|^2[12]{1}[0-9]{7}$ tem algumas falhas. Vai deixar de fora os indicativos da forma 2[2-9][12].

Penso que a separação dos indicativos de Lisboa e Porto até faz sentido. É uma espécie de modularidade. Pegando na expressão anterior, e assumindo que não existem indicativos da forma 2[2-9]0, podemos melhorar ligeiramente a expressão original com: ^9[1236][0-9]{7}$|^2[3-9][1-9][0-9]{6}$|^2[12][0-9]{7}$

Agora, ainda deixa de fora números VoIP, que penso começarem todos por 302 (ou será 30?). Mas também é fácil alterar a expressão regular para os admitir.

  • Vote 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.