elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Expresión regular
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Expresión regular  (Leído 20,652 veces)
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Expresión regular
« Respuesta #20 en: 24 Enero 2010, 19:42 pm »

Ups, perdon, error de copiar y pegar del editor :P

Ahi esta corregida, ahora la explico (y creo que hare un cambio mas :P)


En línea

IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Expresión regular
« Respuesta #21 en: 24 Enero 2010, 20:29 pm »

Ups, perdon, error de copiar y pegar del editor :P

Ahi esta corregida, ahora la explico (y creo que hare un cambio mas :P)

Where is it??? Se te ha olvidado poner la expresión, jajjaja


En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Expresión regular
« Respuesta #22 en: 24 Enero 2010, 20:34 pm »

emm....esta modificado en el mensaje anterior :P

Código:
^(?![.,])(?:[\w!#$%&\'*+\/=?^_`{|}~\-]+(?:[.,][\w!#$%&\'*+\/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?>\[(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))\]|(?![.,])[\w!#$%&\'*+\/=?^_`{|}~\-]+(?:[.,][\w!#$%&\'*+\/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+))$
« Última modificación: 2 Febrero 2010, 15:03 pm por raul338 » En línea

IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Expresión regular
« Respuesta #23 en: 24 Enero 2010, 20:43 pm »

Bueno...... ahora si te digo que no me valida los correos, que me dices?? jejej
Código
  1. $exp = "/^(?![.,])(?:[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?>\[(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))\]|(?![.,])[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+)(?![.,]))$/";
  2. if(!preg_match($exp, $value)){
  3.       $array_err[2] = $key;
  4. }

Si el correo es correcto, $array_err[2] no debería de contener el valor $key y en cambio si lo contiene, ¿Hay algo mal?
En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Expresión regular
« Respuesta #24 en: 24 Enero 2010, 20:54 pm »

Citar
(?![.,])  -> no debe empezar con . o ,
(?:     -> Grupo: texto entre comillas o texto simple con simbolos
  [\w!#$%&'*+/=?^_`{|}~\-]+                 -> Letras o simbolos
  (?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*     -> ., no pueden estar consecutivos
|
  (?>\".+\")                           -> Texto entre comillas
)+           -> Se pueden repetir varias veces
(?![.,])     -> no puede terminar con . o ,
@          -> simbolo arroba
(?>       -> Grupo: puede ser una IP o texto con simbolos
  \[(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))\]
|           ->Texto con simbolos...
  (?![.,])    -> No puede empezar con . o ,
  [\w!#$%&'*+/=?^_`{|}~\-]+      -> letras y simbolos
  (?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*   -> ., no consecutivos
  (?:\.[a-zA-Z]+)  -> Tiene que terminar como dominio (aca es generico, acepta cualquier cosa...)
  (?![.,])   -> Tampoco puede terminar con . o ,
)

Y la explicacion de la expresion regular de IP:

Código:
(?: -> Grupo 1:
  (?> -> Aca separamos, el maximo de cada grupo de una IP es 255
    2 -> Si empieza con 2...
    (?>
      5[0-5]  -> y sigue con 5, que pueda hasta 55
    |
      [0-4]?\d)  -> caso contrario, que sea de 0 a 49
  |
    1?  -> o puede ser que sea 100 o menor
    \d{1,2} -> numero...de no mas de 2 cifras
  )
  \.  -> un punto
){3}  -> se debe repetir 3 veces la captura del grupo
(?:  -> Aca se repite exactamente el mismo grupo, pero sin el punto final
  (?> -> Aca separamos, el maximo de cada grupo de una IP es 255
    2 -> Si empieza con 2...
    (?>
      5[0-5]  -> y sigue con 5, que pueda hasta 55
    |
      [0-4]?\d)  -> caso contrario, que sea de 0 a 49
  |
    1?  -> o puede ser que sea 100 o menor
    \d{1,2} -> numero...de no mas de 2 cifras
  )
)

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
Bueno...... ahora si te digo que no me valida los correos, que me dices?? jejej
Código
  1. $exp = "/^(?![.,])(?:[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?>\[(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))\]|(?![.,])[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+)(?![.,]))$/";
  2. if(!preg_match($exp, $value)){
  3.       $array_err[2] = $key;
  4. }

Si el correo es correcto, $array_err[2] no debería de contener el valor $key y en cambio si lo contiene, ¿Hay algo mal?

Es porque estas poniendo mal la expresion, si la pones entre comillas no debes poner los "/" de inicio y cierre :P

o pones
Código
  1. $exp = "^(?![.,])(?:[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?>\[(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))\]|(?![.,])[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+)(?![.,]))$";
  2.  
o sino
Código
  1. $exp = /^(?![.,])(?:[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?>\[(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))\]|(?![.,])[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+)(?![.,]))$/;
  2.  

:P
En línea

IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Expresión regular
« Respuesta #25 en: 25 Enero 2010, 16:10 pm »

Probe como dices y sigue sin funcionar, y otras expresiones si que me funcionan, pego un trozo más grande del script, y así de paso puedes ver las otras expresiones, por si estuvieran mal, jejej  :xD :xD

Si le quito la / de inicio y fin, no funciona, por ejemplo en la primera que valida nombres, si le quito la /, no funciona y si se la pongo si que funciona bien.

Código
  1. foreach($_POST as $key => $value){
  2. switch($key){
  3. case "Nombre":
  4. if(empty($value) or !preg_match("/^[a-zA-Z]+([\s][a-zA-Z]+)*$/", $value)){
  5. $array_err[0] = $key;
  6. }
  7. break;
  8. case "Apellidos":
  9. if(empty($value) or !preg_match("/^[a-zA-Z]+([\s][a-zA-Z]+)*$/", $value)){
  10. $array_err[1] = $key;
  11. }
  12. break;
  13. case "Email":
  14. $exp = "^(?![.,])(?:[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?>\[(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))\]|(?![.,])[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+)(?![.,]))$";
  15. if(empty($value) or !preg_match($exp, $value)){
  16. $array_err[2] = $key;
  17. }
  18. break;
  19. case "Password":
  20. case "Password1":
  21. if((empty($_POST['Password']) and empty($_PAST['Password1'])) or ($_POST['Password'] != $_POST['Password1'])){
  22. $array_err[3] = $key;
  23. }
  24. break;
  25. case "Dni":
  26. if(empty($value) or !preg_match("/^[0-9]{8}[A-Z]{1}$/", $value)){
  27. $array_err[4] = $key;
  28. }
  29. $numero = substr($value, 0, -1);
  30. $letras = array("T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E");
  31. $dni = $numero . $letras[$numero%23];
  32. if($dni != $value){
  33. $array_err[4] = $key;
  34. }
  35. break;
  36. case "Pais":
  37. if(empty($value)){
  38. $array_err[5] = $key;
  39. }
  40. break;
  41. case "CodigoPostal":
  42. if(empty($value) or !preg_match("/^[0-9]{5}$/", $value)){
  43. $array_err[6] = $key;
  44. }
  45. break;
  46. case "Direccion":
  47. if(empty($value) or !preg_match("/^[a-zA-Z]+([\s-][a-zA-Z]+)*$/", $value)){
  48. $array_err[7] = $key;
  49. }
  50. break;
  51. case "Ciudad":
  52. if(empty($value) or !preg_match("/^[a-zA-Z]+([\s-][a-zA-Z]+)*$/", $value)){
  53. $array_err[8] = $key;
  54. }
  55. break;
  56. case "Provincia":
  57. if(empty($value) or !preg_match("/^[a-zA-Z]+([\s-][a-zA-Z]+)*$/", $value)){
  58. $array_err[9] = $key;
  59. }
  60. break;
  61. case "Numero":
  62. if(empty($value) or !preg_match("/^[0-9]{1,4}$/", $value)){
  63. $array_err[10] = $key;
  64. }
  65. break;
  66. case "Planta":
  67. if(empty($value) or !preg_match("/^[0-9]{1,3}$/", $value)){
  68. $array_err[11] = $key;
  69. }
  70. break;
  71. case "Puerta":
  72. if(empty($value) or !preg_match("/^[\w]{1,4}$/", $value)){
  73. $array_err[12] = $key;
  74. }
  75. break;
  76. case "Telefono":
  77. if(empty($value) or !preg_match("/^[0-9]{9}$/", $value)){
  78. $array_err[13] = $key;
  79. }
  80. break;
  81. }
  82. }
En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Expresión regular
« Respuesta #26 en: 25 Enero 2010, 19:27 pm »

Este es el codigo generado por el ReggexBuddy con el que edito mis expresiones regulares

Código
  1. if (preg_match('/^(?![.,])(?:[\w!#$%&\'*+\/=?^_`{|}~\-]+(?:[.,][\w!#$%&\'*+\/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?>\[(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))\]|(?![.,])[\w!#$%&\'*+\/=?^_`{|}~\-]+(?:[.,][\w!#$%&\'*+\/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+))$/', $value)) {
  2. # Successful match
  3. } else {
  4. # Match attempt failed
  5. }
  6.  

Referencia de porque lo hize asi
explicacion detallada de la expresion


Fijate si te funciona, yo ahora no puedo probar :P
« Última modificación: 20 Marzo 2010, 14:19 pm por raul338 » En línea

IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Expresión regular
« Respuesta #27 en: 25 Enero 2010, 21:31 pm »

Funciona perfecto, eres un maestro de las expresiones regulares, por lo que veo has añadido algunas \ para escapar las / y por lo demás esta igual, gracias, he aprendido mucho y me ha gustado debatir este tema contigo.

Un saludo.
En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Expresión regular
« Respuesta #28 en: 25 Enero 2010, 21:40 pm »

jeje...son fascinante las expresiones regulares, y cada dia aprendo mas de ellas :xD

En este tema aprendi que existia el (?!...), que sirve que cancele el analisis si se cumple la condicion que esta dentro (en lugar de seguir avanzando como lo hacen otros :P)
En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Expresión regular
« Respuesta #29 en: 25 Enero 2010, 23:57 pm »

Deberian haber unas cuantas pruebas, asi uno pasa un buen rato xD.
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Expresión Regular
Desarrollo Web
Shell Root 4 4,390 Último mensaje 10 Abril 2011, 22:26 pm
por Shell Root
Aplicar expresión regular en el resultado de un curl
PHP
Servia 3 3,679 Último mensaje 28 Agosto 2011, 14:11 pm
por WHK
ayuda con una expresion regular :(
Programación General
Elemental Code 6 4,661 Último mensaje 23 Mayo 2012, 04:10 am
por Elemental Code
duda sobre patron de expresion regular
Programación General
MagnusIvanovich 5 3,447 Último mensaje 14 Marzo 2013, 20:11 pm
por 1mpuls0
Ayuda Expresion Regular
Ingeniería Inversa
macmaikel 2 2,632 Último mensaje 11 Junio 2013, 03:36 am
por macmaikel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines