Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Pues yo prefiero el código en Pascal a las expresiones regulares. Principalmente porque me he leído chorrocientosmil artículos, tutoriales y cursos que prometían enseñar fácilmente cómo funcionan, y sigo sin tener ni pajolera idea, porque siempre que he creído entenderlo he intentado crear una y jamás lo he conseguido. Como mucho, he conseguido hacer algún cambio (pequeño) a alguna expresión regular pre-existente, pero nada más.

Además, es código escrito por Ernesto D'Spirito y eso ya me vale. ¡Anda que no he aprendido cosas gracias al trabajo de ese hombre!
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #2  
Antiguo 25-11-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Pues yo prefiero el código en Pascal a las expresiones regulares. Principalmente porque me he leído chorrocientosmil artículos, tutoriales y cursos que prometían enseñar fácilmente cómo funcionan, y sigo sin tener ni pajolera idea, porque siempre que he creído entenderlo he intentado crear una y jamás lo he conseguido. Como mucho, he conseguido hacer algún cambio (pequeño) a alguna expresión regular pre-existente, pero nada más.

Código:
parser.RegEx := '(^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$)';
Pero si está muy claro, lo entiende hasta un niño de 5 años cualquiera, que conozca Unlambda, Malbolge o Brainfuck
Cita:
Unlambda
```s``sii`ki
``s``s`ks
``s``s`ks``s`k`s`kr
``s`k`si``s`k`s`k
`d````````````.H.o.l.a.,. .m.u.n.d.o.!
k
k
`k``s``s`ksk`k.*
Cita:
Malbolge
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCAA@98\6543W10/.R,+O<
Cita:
Brainfuck
+++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Responder Con Cita
  #3  
Antiguo 25-11-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Sí, no son fáciles, pero tampoco son imposibles. Para mi, una expresión regular es de sólo-escritura, las puedes escribir conforme las vas creando pero cuesta trabajo leerlas.

Yo, para validar emails uso esta:

Código:
/^[A-Z0-9_-]+(\.[A-Z0-9_-]+)*@[A-Z0-9_-]+(\.[A-Z0-9_-]+)*\.[A-Z]{2,3}$/i
Para irla entendiendo, omito las diagonales invertidas \ que sirven para escapar:

Código:
/^[A-Z0-9_-]+(.[A-Z0-9_-]+)*@[A-Z0-9_-]+(.[A-Z0-9_-]+)*.[A-Z]{2,3}$/i
Las diagonales / sólo delimitan la expresión y lo que va después es un modificador global, en este caso i que significa case insensitive. El caret ^ significa que debe coincidir con el principio de la cadena y el $ que debe coincidir con el final.

Luego vas separando las partes:

1.
Código:
Uno o más de los caracteres dentro de los corchetes
(letras, números, guiones bajos y medios):

[A-Z0-9_-]+(.[A-Z0-9_-]+)*@[A-Z0-9_-]+(.[A-Z0-9_-]+)*.[A-Z]{2,3}
2.
Código:
0 o más veces lo que está entre paréntesis
(un punto seguido de uno o más letras, números o guiones):

[A-Z0-9_-]+(.[A-Z0-9_-]+)*@[A-Z0-9_-]+(.[A-Z0-9_-]+)*.[A-Z]{2,3}
3.
Código:
La arroba @

[A-Z0-9_-]+(.[A-Z0-9_-]+)*@[A-Z0-9_-]+(.[A-Z0-9_-]+)*.[A-Z]{2,3}
4.
Código:
Uno o más de letras, números o guiones (como en 1.)

[A-Z0-9_-]+(.[A-Z0-9_-]+)*@[A-Z0-9_-]+(.[A-Z0-9_-]+)*.[A-Z]{2,3}
5.
Código:
Igual que en 2.

[A-Z0-9_-]+(.[A-Z0-9_-]+)*@[A-Z0-9_-]+(.[A-Z0-9_-]+)*.[A-Z]{2,3}
6.
Código:
Un punto seguido de 2 o tres letras:

[A-Z0-9_-]+(.[A-Z0-9_-]+)*@[A-Z0-9_-]+(.[A-Z0-9_-]+)*.[A-Z]{2,3}
En términos más humanos: si entendemos por un identificador válido cualquier cosa que tenga letras, números o guiones, éste lo representamos en la expresión regular por [A-Z0-9_-]+. Entonces, conceptualmente hablando, la expresión regular es:

Antes de la arroba: uno o más identificadores separados por puntos
Después de la arroba: uno o más identificadores separados por puntos y dos o tres letras separadas del resto por un punto (o sea, el .com, .org, .mx, etc.)

Y, de hecho, es de esta representación conceptual de donde parte uno y de ahí vas construyendo la expresión.

Lo que uno tiene que tener en cuenta es:
  1. Hay muchas formas de construir una expresión regular para un fin específico.
  2. Por tanto, nadie puede decir ÉSTA es la buena.
  3. No siempre es necesario abarcar todos y cada uno de los casos.

Por ejemplo, la expresión regular que uso, seguramente fallará en algunos casos, pero me ha funcionado sin problemas hasta ahora y a lo sumo tendré un usuario cada dos años que me diga: oye tu sistema no acepta mi correo. Nadie abarca todos los casos. Ni siquiera GMail (que es de donde basé mi expresión). Por ejemplo, ¿sabían que el RFC del email incluye comentarios ? Estoy seguro que nadie valida eso .

También es cierto que hay expresiones más complejas que incluye las referencias hacia atrás y hacia adelante pero las va uno entendiendo conforme escribes la expresión.

El manual de PHP explica muy claramente el uso de expresiones PCRE, que son las más comunes y puede aplicarse a otros ámbitos como Delphi.

LineComment Saludos
Responder Con Cita
  #4  
Antiguo 25-11-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Román: ¡Eso amerita like, tweet, picarle al botón reputación, puntos adicionales de poder y una Montejo! (O la cerveza que usted prefiera).

Gracias por el esmerado aporte.
Responder Con Cita
  #5  
Antiguo 25-11-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Con la cerveza me basta Victoria, por favor

LineComment Saludos
Responder Con Cita
  #6  
Antiguo 25-11-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
De hecho, ahora que lo veo, la expresión de 0x90 es muy parecida. Sólo que él usa \w donde yo uso a-z0-9_ pues éso es lo que significa \w. No recuerdo por qué puse la expresión larga, pero creo que porque JavaScript no aceptaba el \w.

LineComment Saludos
Responder Con Cita
  #7  
Antiguo 25-11-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #8  
Antiguo 25-11-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Brainfuck
Por cierto, recuerdo que Seoane escribía en brainfuck como tú y yo escribimos begin end .

LineComment Saludos
Responder Con Cita
  #9  
Antiguo 25-11-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Por cierto, recuerdo que Seoane escribía en brainfuck como tú y yo escribimos begin end .
LineComment Saludos
Me quedo con el "begin end", es más fácil
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error: too much mail from (dirección ip) enviando correo masivo Gregorio Cíber Internet 2 10-07-2015 13:43:48
Como Saber si una Dirección de Correo es Válida???? AGAG4 Internet 30 19-07-2011 18:36:48
Pueden Ver Mi Direccion De Correo? CITHALI ACERMA Seguridad 12 18-06-2006 22:49:15
El correo que mando a una direccion de hotmail no llega bien URBANO Internet 1 27-04-2005 07:53:49
Ejecutar cliente de correo pasandole la direccion del destinatario Durbed API de Windows 1 19-10-2004 12:34:00


La franja horaria es GMT +2. Ahora son las 21:36:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi