nicruo Posted March 1, 2012 Report Share Posted March 1, 2012 Boa noite pessoal. Fiz esta expressão regular para validar números telefónicos pessoais nacionais. Tem alguma forma melhor o também fazem assim? $pattern = "/9[1236][0-9]{7}|2[1-9][0-9]{7}/"; Abraços. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 1, 2012 Report Share Posted March 1, 2012 poderias filtrar melhor os números fixos pelos indicativos existentes (lembra-te que alguns teem 3 digitios) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted May 8, 2013 Report Share Posted May 8, 2013 $pattern = "/9[1236][0-9]{7}|2[1-9]{1,2}[0-9]{7}/"; Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted May 8, 2013 Report Share Posted May 8, 2013 $pattern = "/9[1236][0-9]{7}|2[1-9]{1,2}[0-9]{7}/"; ?? olha para a tua segunda parte da expressão : 2[1-9]{1,2}[0-9]{7} o número 2222222222 passa na expressão, no entanto tem 10 dígito quanto muito seria: 2([1-9]{1}[0-9]{7}|[1-9]{2}[0-9]{6}) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
mota77 Posted May 9, 2013 Report Share Posted May 9, 2013 Alem dos números VOIP não darem ai 🙂 Link to comment Share on other sites More sharing options...
N3lson Posted May 9, 2013 Report Share Posted May 9, 2013 (edited) <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 May 9, 2013 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 More sharing options...
HappyHippyHippo Posted May 9, 2013 Report Share Posted May 9, 2013 <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 Portugol Plus Link to comment Share on other sites More sharing options...
N3lson Posted May 10, 2013 Report Share Posted May 10, 2013 (edited) 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 May 10, 2013 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 More sharing options...
HappyHippyHippo Posted May 10, 2013 Report Share Posted May 10, 2013 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 Portugol Plus Link to comment Share on other sites More sharing options...
N3lson Posted May 10, 2013 Report Share Posted May 10, 2013 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 More sharing options...
HappyHippyHippo Posted May 10, 2013 Report Share Posted May 10, 2013 (edited) 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 May 10, 2013 by HappyHippyHippo 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
N3lson Posted May 10, 2013 Report Share Posted May 10, 2013 (edited) 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 May 10, 2013 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 More sharing options...
HappyHippyHippo Posted May 10, 2013 Report Share Posted May 10, 2013 foi pedido uma expressão para números nacionais, não existe "separação" ou "opções" a tua expressão regular é um todo, se não é aceite na 3ª parte é aceite na 2ª, logo a expressão regular irá aceitar os números 29* ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
N3lson Posted May 10, 2013 Report Share Posted May 10, 2013 (edited) 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 May 10, 2013 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 More sharing options...
Rui Carlos Posted May 13, 2013 Report Share Posted May 13, 2013 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. 1 Report Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Rui Carlos Posted May 22, 2013 Report Share Posted May 22, 2013 Uma nova discussão, com uma solução mais completa, aqui. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now