Autor
|
Tema: Expresión regular (Leído 20,654 veces)
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Bueno, si el mail comienza con letra tu exprecion falla. aqui explico la mia. ^/[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
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Esta exprecion no es muy confiable: ^[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 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. ^/[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 ^[\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): ^[\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
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
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
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
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
Mensajes: 272
|
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: ^[\w]+([\.\-_][\w]+)*@[\w]+([\.\-\_][\w]+)*\.[\w]{2,3}$ Seria la expresión final, para reconocer correos electronicos, bien formados.
|
|
|
En línea
|
|
|
|
IWKY
Desconectado
Mensajes: 272
|
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.comalgunas direcciones validas serian: 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_addressY una expresión regular que valida todo lo anterior ^(?!\.)("([^"\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: 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.aspxEntonces haría que añadir la parte de después de la @, quedando entonces del siguiente modo. ^(?!\.)("([^"\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
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
\w = [a-zA-Z0-9] (caracteres alfanumericos) \W = [^a-zA-Z0-9] (caracteres no alfanumericos, o sea, simbolos) ^(?!\.)("([^"\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:^(?![.,])(?:[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?![.,])[\w!#$%&'*+/=?^_`{|}~\-]+(?:[.,][\w!#$%&'*+/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+)?(?![.,])$ Ahi esta la expresion regular "master of the sopa" Explicacion... (?![.,]) -> 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 Me dices si te sirve o no
|
|
« Última modificación: 24 Enero 2010, 11:43 am por raul338 »
|
En línea
|
|
|
|
IWKY
Desconectado
Mensajes: 272
|
Perfecto, solo que se me olvido mencionar un detalle en mi último post, 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í: ^(?![.,])(?:[\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
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
es muy largo eso, jeje.... para validar una IP en la manera simple es asi: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} Un poco mas "exacta" seria asi: (?:(?>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: ^(?![.,])(?:[\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
Mensajes: 272
|
Podrías explicarme esa expresión si no es mucho pedir, 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con Expresión Regular
Desarrollo Web
|
Shell Root
|
4
|
4,390
|
10 Abril 2011, 22:26 pm
por Shell Root
|
|
|
Aplicar expresión regular en el resultado de un curl
PHP
|
Servia
|
3
|
3,679
|
28 Agosto 2011, 14:11 pm
por WHK
|
|
|
ayuda con una expresion regular :(
Programación General
|
Elemental Code
|
6
|
4,661
|
23 Mayo 2012, 04:10 am
por Elemental Code
|
|
|
duda sobre patron de expresion regular
Programación General
|
MagnusIvanovich
|
5
|
3,447
|
14 Marzo 2013, 20:11 pm
por 1mpuls0
|
|
|
Ayuda Expresion Regular
Ingeniería Inversa
|
macmaikel
|
2
|
2,632
|
11 Junio 2013, 03:36 am
por macmaikel
|
|