PDA

Ver la Versión Completa : validar un dbedit


moyo18
12-03-2007, 19:10:03
quisiera saber como le haria para valiar un dbedit digamos, quiero poner un correo y si no lleva la textura q lleva u correo por ejemplo si falta la arroba, q salga un mensaje q no esta correo pero si lo esta q se guarden los datos a la table.

o digamos otra forma q he pensado no se si estaria buen es q en un combox elijan diferentes servidores d correos q salgan @homtail por ejmplo y q ese se concatene con lo escrito en el dbedit, pero no se como seria la concatenacion.

en fox la uso con los signos mas, epro en delphgirecien inicio y no se como seria.

jhonny
12-03-2007, 19:23:43
La idea de el combobox sería buena en el caso de que las personas solo pudieran tener su correo en los servidores de tu lista y la concatenación al igual que en FOX es con el signo mas (+)...
Pero si yo quisiera hacer eso sin restringir el tipo de servidor al que las personas deban estar "afiliados" seria buscando la arroba y el punto en la cadena que escriban las personas así:
if (Pos(Edit1.Text, '@') <> 0) then
if (Pos(Edit1.Text, '.') <> 0) then
begin
//Hago lo que tenga que hacer...
end;
Esa puede ser una manera de validar la cosa, pero me supongo que deben haber muchisimas mas..

Caral
12-03-2007, 19:24:51
Hola moyo18
Bienvenido al ClubDelphi.
Para hacer lo que quieres, se puede hacer perfectamente con el combobox, para unir se usa el signo +, igual que en fox, supongo.
La parte de union en codigo seria algo asi:

Edtit1.text + Combobox.text;
Intenta probar asi, y cuando tengas algo de codigo, ponlo aqui y lo veremos mejor.
Saludos

moyo18
12-03-2007, 22:02:41
ok, el problema q tengo es q, cuando le voy nuevo usuario, quisiera q los DBEdit aparecieran en blancoy tambien los INPUTMASK, pero cual le doy nuevo user me aparecen los values q estoy dando en el codigo d abajo de poner el user

procedure TForm1.Button2Click(Sender: TObject);


begin
with ADOTable1 do begin
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
end ;
SaveJpegToTable(ADOTable1, ADOTable1Picture, 'button.jpg') ;


end;



tambien digamos si le doy dos veces click al boton agrEGAR nuevo user si no he metido los cambios automaticamnte se guardan en la tabla los datos d arriba por ejmpplo el userid = 99999, entonces eso me traba la base d datos diciendo q ya esta metido antes y no se puede agregar otro. entonces quisiera saber como seria el codigo q lleva el signo mas del navegador predise;ado de delphi y q me aparescan los inputmask en blanco.


y este es para guardar el user, aki se tenria q ver lo d la validacion de lo del email pero no me funciona asi como esta arriba.

{UserId}
If (DBEdit2.Text = '') then
ShowMessage('User Id is Empty')
else
if (Pos(DBEdit2.Text, '@') <> 0) then
if (Pos(DBEdit2.Text, '.') <> 0) 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
else
Showmessage ('The email entry is wrong');

end;




ARGEGAR UNA PICT A LA BASE D DATOS JPEG Y BMP


const
JPEGstarts = 'FFD8';
BMPstarts = '424D'; //BM

var
Form1: TForm1;

implementation
Uses jpeg;
{$R *.dfm}

{ fuction to see the picture }

function JpegStartsInBlob (PicField:TBlobField):integer;
var
bS : TADOBlobStream;
buffer : Word;
hx : string;
begin
Result := -1;
bS := TADOBlobStream.Create(PicField, bmRead);
try
while (Result = -1) and (bS.Position + 1 < bS.Size) do
begin
bS.ReadBuffer(buffer, 1);
hx:=IntToHex(buffer, 2);
if hx = 'FF' then begin
bS.ReadBuffer(buffer, 1);
hx:=IntToHex(buffer, 2);
if hx = 'D8' then Result := bS.Position - 2
else if hx = 'FF' then bS.Position := bS.Position-1;
end; //if
end; //while
finally
bS.Free
end; //try
end;

{adding picture}



//Extra!! save JPG to table
procedure SaveJpegToTable(Table: TADOTable; PicField:TBlobField; sPicPath: string);
{
Usage:

SPicFileName := 'C:\!gajba\cdcovers\cdcover1.jpg';
SaveJpegToTable(ADOTable1, ADOTable1Picture, SPicFileName);
}
var
fS : TFileStream;
begin
fs:=TFileStream.Create(sPicPath, fmOpenRead);
try
Table.Edit;
PicField.LoadFromStream(fs);
Table.Post;
finally
fs.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
bS : TADOBlobStream;
Pic : TJpegImage;
begin

if opendialog1.execute then
begin
SaveJpegToTable(ADOTable1, ADOTable1picture, Opendialog1.filename);
end;
bS := TADOBlobStream.Create(AdoTable1Picture, bmRead);
try
bS.Seek(JpegStartsInBlob(AdoTable1Picture), soFromBeginning);
Pic:=TJpegImage.Create;
try
Pic.LoadFromStream(bS);
Image1.Picture.Graphic:=Pic;
finally
Pic.Free;
end;
finally
bS.Free
end;

end;









espero entienda lo q estoy haciendo.

la tabla esta en access y estoy usando adotable y adoconnection.

jhonny
12-03-2007, 22:19:24
Porque colocaste (Pos(Edit1.Text, '@') <> 2) se supone que era (Pos(Edit1.Text, '@') <> 0)...

Por otro lado te pido el favor que redactes bien porque se dificulta mucho el leer textos como el que haz escrito.

vtdeleon
12-03-2007, 22:27:28
Yo podrí poner vtdeleon.@ y sería válido

Me guiaré del código de jhonny (porque me da pereza leer el de mas arriba)

var
M,N:Integer;
begin
M:=Pos(Edit1.Text, '@');
N:=Pos(Edit1.Text, '.')
if (M> 1) then
if (N+2 > M) then//tambien podría ponerse Legth para saber la cantidad de caracteres
//y que este sea mayor que la posición del punto (.)
begin
//Hago lo que tenga que hacer...
end;
Saludos

jhonny
12-03-2007, 23:02:39
El problema con el codigo de vtdeleon es que no sería valido el siguiente:

jhonny.yonny@clubdelphi.com

Mas bien le agregaria algo que mire que despues de la arroba haya un punto(.) pero que ese punto no sea el ultimo caracter como bien ya lo ha indicado vtdeleon...

Parece que esto es mas complicado de lo que se cree, jejeje.

Ejemplo pachuco:

Copy('jhonny.yonny@clubdelphi.com',
Pos('jhonny.yonny@clubdelphi.com','@'),
Length('jhonny.yonny@clubdelphi.com')); //Si la respuesta es vacia pues de entrada ya esto quiere
// decir que el email no es valido... De lo contrario...

Eso me devolveria solo la cadena despues de la @ y alli si evaluar que haya un proximo punto y que ademas no sea el ultimo.

moyo18
12-03-2007, 23:15:02
ya esta a ver si entiendes ahroa, gracias por la ayuda.

jhonny
12-03-2007, 23:25:37
Bueno, veo que haz cambiado el 2 por el 0, pero de todas maneras debes ahora aplicar los cambios mencionados por vtdeleon y a eso agregarle el cambio que te he mencionado anteriormente

moyo18
12-03-2007, 23:49:48
no entinedo como iria esto

Copy('jhonny.yonny@clubdelphi.com',
Pos('jhonny.yonny@clubdelphi.com','@'),
Length('jhonny.yonny@clubdelphi.com')); //Si la respuesta es vacia pues de entrada ya esto quiere
// decir que el email no es valido... De lo contrario...

porq primero COPy y luego usas POST, si lo primero fue

if (Pos(DBEdit9.Text, '@') <> 0) then
if (Pos(DBEdit9.Text, '.') <> 0) then

entonces no entiendo, eso seria abajo d la condicion, pero porq
POS si ya esta usado arriba.

vtdeleon
12-03-2007, 23:56:11
El problema con el codigo de vtdeleon es que no sería valido el siguiente:

jhonny.yonny@clubdelphi.com"tenes razón chamo, tenes razón":D
Y que tal esto?

var
M,N:Integer;
SubCadena:String;
begin
M:=Pos(Edit1.Text, '@');
SubCadena=Copy(Edit1.Text,M,Length(Edit1.Text));
N:=Pos(SubCadena, '.')
if (M> 1) then
if (N>2) then//tambien podría ponerse Legth para saber la cantidad de caracteres
//y que este sea mayor que la posición del punto (.)
begin
//Hago lo que tenga que hacer...
end;Lo de ">2" o ">1" lo pongo porque me da la impresión (y puedo estar equivocado) de que hay muy pocos o ningún correo que sea "x@x.com", ya eso depende de quien lo quiera usar así o como jhonny "<>0".

jhonny
13-03-2007, 00:14:01
tenes razón chamo, tenes razón"
Chamo??? Acaso esa palabra no la usan es en Venezuela? :D :D :D

Bueno mi amigo, según parece la cosa va quedando así:

var
M,N :Integer;
SubCadena :String;
begin
M:=Pos(Edit1.Text, '@');
if (M > 1) then
begin
SubCadena=Copy(Edit1.Text,M,Length(Edit1.Text));
N:=Pos(SubCadena, '.')
if ((N>2) and (Length(SubCadena)<>N) ) then
begin
//Hago lo que tenga que hacer...
end;
end;
end;


Le agregue de una vez por todas el Length :D, y coloque el if (M > 1) arriba para que en caso de que la @ no exista en la cadena pues no tenga que esperar hasta el final para darse cuenta de eso.

En cuanto a las confusiones que tienes acerca de la función que utilice en mi anterior Post pues te diré que lo que sucede es que estaba haciendo parte de lo que vtdeleon acaba de explicarte en su código anterior de una manera mas detallada... Mejor dicho no atiendas ese post y concentrate en el que estamos armando en este momento.

moyo18
13-03-2007, 00:26:21
intente haciendo como dices y no se puede, siempre guarda el dato, lleve o no lleve arroba ni punto, no me servidira la validacion.

y como seria para poner en blanco todo al querer insertar un nuevo usuario sin necesidad de poner los values q estan en el codigo d arriba, habia intentado asi

edit1.text = '' ;

pero pues me pone todo blanco pero a la hora d insertar los valores siempre los values q estan arriba me aparecen

estos

with ADOTable1 do begin
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

moyo18
13-03-2007, 00:35:39
viendo como iria quedando seria asi, pero sigue igual, los datos ingresados en el DBEDIT siempre se guardan llevando o no llevando la arroba o el punto, y ahora pasa algo, los datos q entro en los inputmask q son los q llevaran los otros DBEdit, con ese codigo q se lo pongo antes ya no se guardan ni nada, queda los values q esta arriba como

userid = 9999 y asi con los demas

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;

jhonny
13-03-2007, 00:36:21
intente haciendo como dices y no se puede
Si se puede, lo que pasa es que debes entender el código y luego aplicarlo a tu necesidad.

roman
13-03-2007, 00:45:35
Esos Pos son incorrectos; el primer argumento es la cadena a buscar y el segundo la cadena donde se busca.

Por otra parte, me valida como correcto direcciones como:

jhonny.yonny@clubdelphi.com.

o

.jhonny.yonny@clubdelphi.com

o

jhonny..yonny@clubdelphi.com

// Saludos

vtdeleon
13-03-2007, 00:47:57
Parece que esto es mas complicado de lo que se cree, jejeje.Parece que llevas razón, roman nos ha partido en dos.:D

moyo18
13-03-2007, 02:08:51
bueno a mi no me trabaja el codigo asi como lo tiene el d la arroba, siempre me guarda las cosas y no me tira el mensaje q esta malo porq no tiene ni arroba ni nada q paresca un email.

arreglando eso me hice con un comboxbox y pues ingeniandomelas un poquito saque un codigo


var
pri : string ;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin

case combobox2.ItemIndex of

0 : begin
pri := DBedit9.Text + '@hotmail.com' ;
end;
1 : begin
pri := DBedit9.Text + '@msn.com' ;
end;
2 : begin
pri := DBedit9.Text + '@yahoo.com' ;
end;
3 : begin
pri := DBedit9.Text + '@mts.net' ;
end;
4 : begin
pri := DBedit9.Text + '@shaw.ca' ;
end;
end;
end;


pero ojala se pueda hacer con el metodo ese d si no encuentra la arroba o el punto no lo permita.

y tambien sigo con lo del nuevo usuario, como hacer q queden en blanco los edits sin q se ponga los values q se les dan arriba, ya q se clickeo dos veces el nuevo usuario no me permite aregar nada y me da un error d un solo ya q se han insertado los otros valores autoamticamente.

egostar
13-03-2007, 02:53:12
Indudablemente que validar un correo electronico tiene sus asegunes, hasta ahora se ha tratado de verificar la semantica del correo, pero eso solo nos dice que se escribio bien, yo agregaria un paso mas recuperando la IP del servidor de correo, usando el código que seoane acaba de proporcionar en otro hilo.

Aqui pego el código el cual nos garantiza al menos que se esta usando un servidor válido. Solo necesitamos agregar www. y lo que sigue del @.



Uses Winsock;

function GetIp(Host: string): string;
var
WSAData: TWSADATA;
HostEnt: phostent;
begin
Result:= '';
if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
begin
HostEnt:= gethostbyname(PChar(Host));
if HostEnt <> nil then
Result:= String(inet_ntoa(PInAddr(HostEnt.h_addr_list^)^));
WSACleanup;
end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ShowMessage(GetIp('www.hotmail.com'));
ShowMessage(GetIp('www.esunabroma.com')); //NO válido
ShowMessage(GetIp('www.yahoo.com.mx'));
ShowMessage(GetIp('www.yahoo.com'));
ShowMessage(GetIp('www.esunabroma.com')); //NO válido
ShowMessage(GetIp('www.clubdelphi.com'));
ShowMessage(GetIp('www.clubdelphi.com.mx')); //NO válido
end;


Esto nos regresa la IP si está correcto el servidor de correo, de otra forma nos da un valor nulo.

Yo creo que esto ya es un gran avance.

Saludos

roman
13-03-2007, 04:24:11
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???? (http://www.clubdelphi.com/foros/showthread.php?t=21741). En esa ocasión se planteó el uso de expresiones regulares y se habló de RegExp Studio (http://www.regexpstudio.com/), 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


[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+


que- según creo -puede reducirse a:


[\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:


^\w+(\.\w+)*@(\w+(\.\w+)+)$


que podría completarse a


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


si permitimos guiones.

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


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

egostar
13-03-2007, 04:29:21
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
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.



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:

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
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
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
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
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???? (http://www.clubdelphi.com/foros/showthread.php?t=21741). En esa ocasión se planteó el uso de expresiones regulares y se habló de RegExp Studio (http://www.regexpstudio.com/), 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


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


[\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:


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


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

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

Código Delphi [-] (http://www.clubdelphi.com/foros/#)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
¡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í (http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular) hay bastante información. Entre otras cosas dice:

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
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'