Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   validar un dbedit (https://www.clubdelphi.com/foros/showthread.php?t=41309)

egostar 13-03-2007 04:29:21

Cita:

Empezado por roman
Esta es una muy buena idea, aunque creo que no hay que descartar la validación gramatical.

Claro, asi es como lo soñe, primero se verifica gramaticalmente y si es correcta y ademas se desea, se valida la parte del servidor de correo.

Saludos Validados como lo diria nuestro buen amigo Al.

basti 13-03-2007 12:20:26

Cita:

Empezado por moyo18
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject); var  M,N :Integer;  SubCadena :String; begin   M:=Pos(DBEdit9.Text, '@');   if (M > 1) then   begin     SubCadena:=Copy(DBEdit9.Text,M,Length(Edit1.Text));     N:=Pos(SubCadena, '.') ;     if ((N>2) and (Length(SubCadena)<>N) ) then   begin    ADOTable1.Edit;     DBEdit2.text := Maskedit1.Text ;     DBEdit6.text := Maskedit2.Text ;     DBEdit8.text := Maskedit3.Text ;     DBEdit10.text := Maskedit4.Text ;     ADOTable1UserID.AsString := DBEdit2.text;     ADOTable1LastName.AsString := DBEdit3.text;     ADOTable1Name.AsString := DBEdit4.text;     ADOTable1Address.AsString := DBEdit5.text;     ADOTable1PostalCode.AsString := DBEdit6.text;     ADOTable1City.AsString := DBEdit7.text;     ADOTable1Phone.AsString := DBEdit8.text;     ADOTable1Email.AsString := DBEdit9.text;     ADOTable1Birthday.AsString := DBEdit10.text;    ADOTable1.Post;   end;  end; end;

No necesitas asignar los DBEdit a los campos, eso ya lo hacen los controles por sí mismos si tienen asignada la propiedad Datafield.

Cita:

Empezado por moyo18
Código Delphi [-]

            insert;
             FieldByName('UserID').Value := '9999999';
             FieldByName('LastName').Value := 'LastName';
             FieldByName('Name').Value := 'Name';
             FieldByName('Address').Value := 'Address';
             FieldByName('PostalCode').Value := 'Postal Code';
             FieldByName('City').Value := 'City';
             FieldByName('Phone').Value := '8787878';
             FieldByName('Email').Value := 'Email';
             FieldByName('Birthday').Value := '12/31/1900';
            post


Aquí añades ya el registro con los valores, por eso te salen esos valores y los guarda al hacer el post. Te bastaría con hacer el Insert, o Append y no dar valores a los campos, excepto a los que quieras que tengan un valor por defecto, y no hacer el post.


Ej:
Código Delphi [-]
procedure TForm1.BtnNuevoClick(Sender : TObject);
begin
  if not (AdoTable1.State in [dsEdit, dsInsert]) then
    AdoTable1.Insert; // o AdoTable1.Append
end;

procedure TForm1.BtnGuardarClick(Sender : TObject);
begin
  if AdoTable1.State in [dsEdit, dsInsert] then
    AdoTable1.Post;
end;

basti 13-03-2007 12:22:41

Cita:

Empezado por roman
aunque no me queda claro que los guiones estén permitidos en un email y permitiría un punto inicial que no creo que sea válido.

Los guiones sí son permitidos en los e-mails, lo del punto inicial no estoy seguro.

jhonny 13-03-2007 15:00:23

Cita:

Empezado por vtdeleon
Parece que llevas razón, roman nos ha partido en dos.

Yo diria que en 3, ahhhh, yo que pense que la situación estaba casi que controlada... :D

roman 13-03-2007 18:30:36

Cita:

Empezado por jhonny
Yo diria que en 3, ahhhh, yo que pense que la situación estaba casi que controlada... :D

Yo diría que como ustedes lo estaban haciendo también se puede resolver. Nada más que ustedes sólo estaban considerando la segunda mitad de la cadena, después de la arroba.

Además ni siquiera las expresiones regulares son la panacea porque las #$%&/!"& direcciones de email son muy complejas, y según he visto en algunos lugares, acepta cosas muy raras, así que ni un método ni otro van a cubrir todos los casos.

// Saludos

moyo18 14-03-2007 00:04:43

me han ayudado mucho, muchas gracias

salu2

seoane 14-03-2007 15:47:10

Perdon, pero no me pude resistir :p

http://xkcd.com/c208.html

jhonny 08-01-2009 19:32:06

Cita:

Empezado por roman (Mensaje 188355)
Esta es una muy buena idea, aunque creo que no hay que descartar la validación gramatical.

Ya anteriormente se ha discutido esto, por ejemplo, en el hilo Como Saber si una Dirección de Correo es Válida????. En esa ocasión se planteó el uso de expresiones regulares y se habló de RegExp Studio, que me parece un buen enfoque.

Usar TRegExpr es cosa sólo de incluir una unidad en el proyecto así que no necesitamos instalar nada ni insertar componentes ni depender de dlls externas.

En el hilo mencionado se propone una expresión regular

Código:

[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+
que- según creo -puede reducirse a:

Código:

[\w\-\.]+@[\w\-]+(\.[\w\-]+)+
aunque no me queda claro que los guiones estén permitidos en un email y permitiría un punto inicial que no creo que sea válido.

Haciendo algunas pruebas, me ha gustado esta:

Código:

^\w+(\.\w+)*@(\w+(\.\w+)+)$
que podría completarse a

Código:

^[\w\-]+(\.[\w\-]+)*@([\w\-]+(\.[\w\-]+)+)$
si permitimos guiones.

Aplicando a nuestro caso, podemos implementar esta función:

Código Delphi [-]uses RegExpr; function EsEmailValido(Email: String; Ping: Boolean = false); var RegExp: TRegExpr; begin RegExp := TRegExp.Create; try RegExp.Expression := '^\w+(\.\w+)*@(\w+(\.\w+)+)$'; Result := RegExp.Exec(Email); if Result and Ping then Result := GetIP(RegExp.Match[2]) <> ''; finally RegExp.Free; end; end;


El parámetro Ping sería para indicar si deseamos verificar la existencia del servidor.

// Saludos

Hola roman, hoy me ha causado curiosidad un asunto, ¿Estas son expresiones propias del TRegExpr o es algun estandar que hay?

roman 08-01-2009 19:42:20

¡Válgame! :eek:

Lo malo de las expresiones regulares, es que, pasados uns meses (o años), uno no tiene ni idea de cómo fue capaz de escribir tal serie de majaderías :D

En fin; aunque creo que hay variantes, las expresiones regulares más o menos son un estándar que, si no me equivoco, se basan en las que usa PERL.

// Saludos

jhonny 08-01-2009 19:48:57

Cita:

Empezado por roman (Mensaje 333854)
¡Válgame! :eek:

Lo malo de las expresiones regulares, es que, pasados uns meses (o años), uno no tiene ni idea de cómo fue capaz de escribir tal serie de majaderías :D

En fin; aunque creo que hay variantes, las expresiones regulares más o menos son un estándar que, si no me equivoco, se basan en las que usa PERL.

Jejeje, Bueno, muchas gracias por tu respuesta roman :).

roman 08-01-2009 19:53:23

Aquí hay bastante información. Entre otras cosas dice:

Cita:

Perl: es el lenguaje que hizo crecer a las expresiones regulares en el ámbito de la programación hasta llegar a lo que son hoy en día.
Ojalá Delphi incorporase de fábrica las expresiones regulares, o ¿ya lo hace?

// Saludos

// Saludos

jhonny 08-01-2009 19:59:32

Cita:

Empezado por roman (Mensaje 333860)
Ojalá Delphi incorporase de fábrica las expresiones regulares, o ¿ya lo hace?

El otro día estuve buscando el asunto en la ayuda de Delphi 2007 y en la de Delphi 2009, precisamente basado en un hilo en el que participaron Al y vos, pero desafortunadamente no encontré dicho material.

jhonny 08-01-2009 20:19:11

Una libreria que he notado que buscan mucho por ahí, es la llamada TPerlRegEx http://www.regular-expressions.info/delphi.html nunca la he usado, pero como ya te he dicho he notado que la buscan bastante. El ejemplos para Email que esta en esa web es mas largo que los que propones, pero aca te va '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b'


La franja horaria es GMT +2. Ahora son las 02:36:35.

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