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

 

 


Tema destacado: Curso de javascript por TickTack


+  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,778 veces)
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Expresión regular
« Respuesta #10 en: 24 Enero 2010, 00:53 am »

Bueno, si el mail comienza con letra tu exprecion falla. aqui explico la mia.
Código:
^/[a-z0-9_.-]+\@[a-z0-9._-]+\.\w{2,3}$/i
Primero indico que la cadena debe comenzar con letras, numero, guion y punto y indico que pueden aparecer una o mas veces. luego con el @ indico que hasta hay llegara o si no se toma todo, luego indico que despues del @ pueden haber, letras, numero, puntos y guion.luego indico el punto  y despues indico que despues del punto puede aparecer, numeros, letras y guion y que debe tener minimos 2 caracter y maximo 3 y que solo debe estar al final.


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.
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Expresión regular
« Respuesta #11 en: 24 Enero 2010, 01:07 am »

Esta exprecion no es muy confiable:
Código:
^[a-zA-Z][\w\.\-\_]+\@[\w\.\-\_]+\.\w{2,4}$
Ya que primero dice que si al principio aparecen palabras en mayuscula o minuscula y si al principio no hay palabras si no numero no funcionara la exprecion regular como deberia de ser.

Lee bien :P dije que a mi no me parece que un mail deberia empezar con numeros o simbolos, por eso puse que empieze con una letra y despues lo que sea :)
Bueno, si el mail comienza con letra tu exprecion falla. aqui explico la mia.
Código:
^/[a-z0-9_.-]+\@[a-z0-9._-]+\.\w{2,3}$/i
Primero indico que la cadena debe comenzar con letras, numero, guion y punto y indico que pueden aparecer una o mas veces. luego con el @ indico que hasta hay llegara o si no se toma todo, luego indico que despues del @ pueden haber, letras, numero, puntos y guion.luego indico el punto  y despues indico que despues del punto puede aparecer, numeros, letras y guion y que debe tener minimos 2 caracter y maximo 3 y que solo debe estar al final.
es identica a mi segunda opcion (la mas simple)
entonces haz una expresion mas simple
Código:
^[\w\.\-\_]+\@[\w\.\-\_]+\.\w{2,4}$

para que te vas a romper la cabeza intentando poner miles de formas raras??? .... esa expresion funciona con todos los mails que pusiste

Y aca esta mejorada, no permite simbolos consecutivos, (aunque esto no lo probe, deberia funcionar):

Código:
^[\w]+([.-_][\w]+)*\@[\w]+([.-_][\w]+)*\.\w{2,4}$

^ -> inicio de linea
[\w]+ -> Empieza si o si con una o mas letras o numeros
([.-_][\w]+)* -> puede haber uno o mas grupos de la siguente forma: (simbolo)(letroa o numeros)
\@ -> Simbolo Arroba
[\w]+([.-_][\w]+)* -> Idem. Arriba
\.\w{2,4} -> un punto y el final de la direccion (entre 2 y 4, ej: .ar, .net, .com, etc)
$ -> fin de linea

la \w es simplemente valores alfanumericos, no simbolos :P


En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Expresión regular
« Respuesta #12 en: 24 Enero 2010, 01:21 am »

Naaa la mía no es indentica a la tuya, la mía es mejor jajaja (broma).
Ps eso, el $  indica que algo debe estar al final de la cadena, no indica el final de la cadena.
« Última modificación: 24 Enero 2010, 01:38 am por yoyahack » 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.
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Expresión regular
« Respuesta #13 en: 24 Enero 2010, 01:35 am »

nop, el $ significa fin de linea, si hay algo mas de lo ultimo que se especifico, la expresion regular es invalida, el ^$ es usado para comprobar textos con expresiones regulares /(normalmente), en cambio cuando se requieren "obtener" parte del texto analizado, es conveniente no usarlos ;)
En línea

IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Expresión regular
« Respuesta #14 en: 24 Enero 2010, 03:01 am »

Bien pero también hay que saber como es un email realmente, donde esta definido que caracteres puede llevar y cuales no, en que posiciones se permiten que caracteres y en cuales no, y a partir de ahí se puede hacer una buena expresión regular.

Entonces:
Código:
^[\w]+([\.\-_][\w]+)*@[\w]+([\.\-\_][\w]+)*\.[\w]{2,3}$
Seria la expresión final, para reconocer correos electronicos, bien formados.
En línea

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

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Expresión regular
« Respuesta #15 en: 24 Enero 2010, 04:27 am »

Bueno, pues parece que ya he encontrado lo que estaba buscando en el rfc2822 se especifica el tamaño y los caracteres permitidos, así pues, los caracteres permitidos para la parte local (antes de @) son:

Letras minúsculas y mayúsculas (a-z, A-Z)
Dígitos 0 a 9
Caracteres ! # $ % & ' * + - / = ? ^ _ ` { | } ~

También el carácter ., no puede aparecer ni al inicio ni en el fin de la parte local, además no puede aparecer dos o más veces consecutivas.

Además de esto, también están permitidos las cadenas de texto entre comilladas, por ejemplo, "este ejemplo"@server.com y se distingue entre mayúsculas y minúsculas, no es lo mismo micorreo@server.com que miCorreo@server.com

algunas direcciones validas serian:

Cita de: Hay algunos repetidos
abc@example.com
Abc@example.com
aBC@example.com
abc.123@example.com
1234567890@example.com
_______@example.com
abc+mailbox/department=shipping@example.com
!#$%&’*+-/=?^_`.{|}~@example.com (todos estos caracteres están permitidos)
“abc@def”@example.com (cualquier cosa que esté entre comillas)
“Fred Bloggs”@example.com
“Fred \”quota\” Bloggs”@example.com (ojo, las comillas deben escaparse)
"Abc\@def"@example.com
"Fred Bloggs"@example.com
"Joe\\Blow"@example.com
"Abc@def"@example.com
customer/department=shipping@example.com
$A12345@example.com
!def!xyz%abc@example.com
_somename@example.com

El problema viene que después del estándar cada uno hace lo que quiere, así pues los servidores de correo admiten algunos caracteres o todos, habrá servidor que los admitirá todos (lo dudo) y habrá servidor que admitirá menos caracteres.

También se especifica que la longitud mínima es de 6 caracteres y la máxima de 255.

Fuente de todo lo anterior: http://en.wikipedia.org/wiki/E-mail_address

Y una expresión regular que valida todo lo anterior
Código:
^(?!\.)("([^"\r\\]|\\["\r\\])*"|([-a-z0-9!#$%&'*+/=?^_`{|}~] |(?@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$
Hay una nota en la web de donde la he sacado que dice:
Citar
The part in bold is the local part. I am not worrying about checking my assumptions for the domain part for now.
Entiendo de esto que la parte que esta en negrita es la que valida la parte local y el chico este dice que no le preocupa la parte del dominio que es trivial.
fuente: http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx

Entonces haría que añadir la parte de después de la @, quedando entonces del siguiente modo.
Código:
^(?!\.)("([^"\r\\]|\\["\r\\])*"|([-a-z0-9!#$%&'*+/=?^_`{|}~] |(?@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]@[\w]+([\.\-\_][\w]+)*\.[\w]{2,4}$

Nota: Dice que esta expresión regular no es sensible a diferenciar las mayúsculas y minúsculas, cosa que se debería de cumplir para ajustarse al estándar.

PD: No me queda muy claro que caracteres contiene \w, ¿Alguien lo podría explicar?

EDITO: Me ha faltado comentar que la parte del dominio, también se puede escribir indicando la ip del mismo del siguiente modo: user@[123.123.123.123] vamos lo que seria un ip bien formada encerrada entre corchetes.
« Última modificación: 24 Enero 2010, 12:04 pm por IWKY » 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 #16 en: 24 Enero 2010, 11:02 am »

\w = [a-zA-Z0-9] (caracteres alfanumericos) :P
\W = [^a-zA-Z0-9] (caracteres no alfanumericos, o sea, simbolos)

Código:
^(?!\.)("([^"\r\\]|\\["\r\\])*"|([-a-z0-9!#$%&'*+/=?^_`{|}~] |(?@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]@[\w]+([\.\-\_][\w]+)*\.[\w]{2,4}$
Esa expresion esta mal formada, o al menos el RegexBuddy me la toma como erronea (faltan cierres de parentesis :()

Estoy trabajando en una alta expresion regular que se adapte a esa forma ;)

EDIT:
Código:
^(?![.,])(?:[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?![.,])[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+)?(?![.,])$

Ahi esta la expresion regular "master of the sopa" :laugh:

Explicacion...
Citar
(?![.,]) -> No puede empezar con . o ,
(?: -> Aca separamos, puede haber texto o texto entre comillas
  [\w!#$%&'*+/=?^_`{|}~\-]+    -> debe empezar con una o mas letras o simbolos
  (?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)* -> los . y , no pueden ser consecutivos, por lo tanto lo que sea que les siga debe ser los otros caracteres admitidos
|
  (?>\".+\")  -> Puede haber cualquier cosa entre las comillas, pero si o si deben haber 2
)+ -> Pueden haber texto y texto entre comillas mezclado
(?![.,]) -> la parte local no debe terminar con . o ,
@ -> Simbolo arroba
-- Aca puse el mismo criterio que la parte local, solo que no se puede escribir texto entre comillas
(?![.,]) -> No puede empezar con . o ,
[\w!#$%&'*+/=?^_`{|}~\-]+ -> deben haber una o mas letras o simbolos
(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)* -> Idem arriba sobre los .y , consecutivos
(?:\.[a-zA-Z]+)? -> puede como no tener una parte de dominio (ej: .com, .net, etc; esto lo idee en base a la expresion regular mas arriba, que lo ponia como condicional)
(?![.,]) -> no puede terminar con . o con ,


Funciona con todos los mails de ejemplo que pusiste, estoy activo :P
Me dices si te sirve o no  :P
« Última modificación: 24 Enero 2010, 11:43 am por raul338 » En línea

IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Expresión regular
« Respuesta #17 en: 24 Enero 2010, 12:03 pm »

Perfecto, solo que se me olvido mencionar un detalle en mi último post,  :xD La parte del dominio también puede ser una ip, y se debe de escribir del siguiente modo, correo@[123.123.123.123], bueno este si que seria el último detalle para cumplir con el estándar. Gracias por la explicación.

Supongo que podría quedar así:
Código:
^(?![.,])(?:[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@((?![.,])[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+)?(?![.,]))|(\[(25[012345]|2[01234]\d|[01]?\d\d?)\.(25[012345]|2[01234]\d|[01]?\d\d?)\.(25[012345]|2[01234]\d|[01]?\d\d?)\.(25[012345]|2[01234]\d|[01]?\d\d?)\])$
« Última modificación: 24 Enero 2010, 12:48 pm por IWKY » 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 #18 en: 24 Enero 2010, 18:42 pm »

es muy largo eso, jeje.... para validar una IP en la manera simple es asi:
Código:
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

Un poco mas "exacta" seria asi:
Código:
(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))

entonces esta ultima agregada a mi expresion regular seria mas o menos asi:

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]+)(?![.,]))$

Corregido!
« Última modificación: 24 Enero 2010, 19:51 pm por raul338 » En línea

IWKY

Desconectado Desconectado

Mensajes: 272



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

Podrías explicarme esa expresión si no es mucho pedir,  :xD porque dices que has incluido la verificación de la ip en la parte del host, y no lo veo o no se leerlo bien que será lo más seguro.

Eres un fenómeno de las expresiones regulares.

Un saludo
En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
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,421 Ú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,695 Último mensaje 28 Agosto 2011, 14:11 pm
por WHK
ayuda con una expresion regular :(
Programación General
Elemental Code 6 4,733 Último mensaje 23 Mayo 2012, 04:10 am
por Elemental Code
duda sobre patron de expresion regular
Programación General
MagnusIvanovich 5 3,486 Último mensaje 14 Marzo 2013, 20:11 pm
por 1mpuls0
Ayuda Expresion Regular
Ingeniería Inversa
macmaikel 2 2,662 Último mensaje 11 Junio 2013, 03:36 am
por macmaikel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines