============================================================== Eu perguntei ao nosso amigo GOOGLE e veja o que ele respondeu: ==============================================================
Validando formato de e-mail: Primeiramente vc deverá ter num form: Um Edit (ou DBEdit), Um Button e Um Label. Antes de implementation coloque: Const msg1 = 'Caractere(s) inválido(s) no início do e-mail.'; msg2 = 'Símbolo @ não foi encontrado.'; msg3 = 'Excesso do símbolo @.'; msg4 = 'Caractere(s) inválido(s) antes do símbolo @.'; msg5 = 'Caractere(s) inválido(s) depois do símbolo @.'; msg6 = 'Agrupamento de caractere(s) inválido(s) a esqueda do @.'; msg7 = 'Não existe ponto(s) digitado(s).'; msg8 = 'Ponto encontrado no final do e-mail.'; msg9 = 'Ausência de caractere(s) após o último ponto.'; msg10 = 'Excesso de ponto(s) a direita do @.'; msg11 = 'Ponto(s) disposto(s) de forma errada após o @.'; msg12 = 'Caractere(s) inválido(s) antes do ponto.'; msg13 = 'Caractere(s) inválido(s) depois do ponto.'; var Form1: TForm1; { <--- Nome do meu formulário } vet_valido: array [0..35] of string = ('0','1','2','3','4','5','6','7', '8','9','a','b','c','d','e','f', 'g','h','i','j','k','l','m','n', 'o','p','q','r','s','t','u','v', 'w','x','y','z'); Depois de implementation {$R *.DFM} coloque a seguinte função: function func_VerifEmail(email: string): boolean; var i, j, tam_email, simb_arroba, simb_arroba2, qtd_arroba, qtd_pontos, qtd_pontos_esq, qtd_pontos_dir, posicao, posicao2, ponto, ponto2: integer; vet_email: array [0..49] of string; //50 posições, capacidade do Edit msg: string; begin Nesta função (func_VerifEmail) é utilizada a função Copy, exemplo: Copy(s,i,t) significa trecho de s que começa em i com tamanho t} qtd_pontos:= 0; qtd_pontos_esq:= 0; qtd_pontos_dir:= 0; qtd_arroba:= 0; posicao:=0; posicao2:=0; simb_arroba:=0; simb_arroba2:=0; ponto:= 0; ponto2:= 0; msg:=''; Result:= True; //Verificando parte inicial do E-mail tam_email:= Length(email); for i:= 0 to tam_email-1 do begin vet_email[i]:= Copy(email,i+1,1); if vet_email[i] = '@' then begin Inc(qtd_arroba); posicao:= i; end; end; if ((vet_email[0] = '@') or (vet_email[0] = '.') or (vet_email[0] = '-')) then begin Result:= False; msg:= msg1; end; //Verificando se tem o símbolo @ e quantos tem if qtd_arroba < 1 then begin Result:= False; msg:= msg2; end else if qtd_arroba > 1 then begin Result:= False; msg:= msg3 + ' Encontrado(s): '+IntToStr(qtd_arroba)+'.'; end else //Verificando o que vem antes e depois do símbolo @ begin for i:=0 to 35 do begin if vet_email[posicao-1] <> vet_valido[i] then Inc(simb_arroba) else Dec(simb_arroba); if vet_email[posicao+1] <> vet_valido[i] then Inc(simb_arroba2) else Dec(simb_arroba2); end; if simb_arroba = 36 then begin //Antes do arroba há um símbolo desconhecido do vetor válido Result:= False; msg:= msg4; end else if simb_arroba2 = 36 then begin //Depois do arroba há um símbolo desconhecido do vetor válido Result:= False; msg:= msg5; end end; //Verificando se há pontos e quantos, e Verificando parte final do e-mail for j:=0 to tam_email-1 do if vet_email[j] = '-' then if ((vet_email[j-1] = '.') or (vet_email[j-1] = '-')) then begin Result:= False; msg:= msg6; end; for i:=0 to tam_email-1 do if vet_email[i] = '.' then begin Inc(qtd_pontos); posicao2:= i+1; if i > posicao then Inc(qtd_pontos_dir) else Inc(qtd_pontos_esq); if ((vet_email[i-1] = '.') or (vet_email[i-1] = '-')) then begin Result:= False; msg:= msg6; end; end; if qtd_pontos < 1 then begin Result:= False; msg:= msg7; end else if vet_email[tam_email-1] = '.' then begin Result:= False; msg:= msg8; end else if vet_email[tam_email-2] = '.' then begin Result:= False; msg:= msg9; end else if qtd_pontos_dir > 2 then begin Result:= False; msg:= msg10 + ' Encontrado(s): '+ IntToStr(qtd_pontos)+#10+'Encontrado(s) a direita do @: '+ IntToStr(qtd_pontos_dir)+'.'; end else if (not ((((tam_email - posicao2) = 3) and (qtd_pontos_dir = 1)) or (((tam_email - posicao2) = 2) and (qtd_pontos_dir = 2)) or (((tam_email - posicao2) = 2) and (qtd_pontos_dir = 1)))) then begin Result:= False; msg:= msg11 +#10+ 'Encontrado(s) a esquerda do @: '+ IntToStr(qtd_pontos_esq) +#10+ 'Encontrado(s) a direita do @: '+ IntToStr(qtd_pontos_dir)+'.'; end else //Verificando o que vem antes e depois do ponto begin for i:=0 to 35 do begin if vet_email[posicao2-2] <> vet_valido[i] then Inc(ponto) else Dec(ponto); if vet_email[posicao2] <> vet_valido[i] then Inc(ponto2) else Dec(ponto2); end; if ponto = 36 then begin //Antes do ponto há um símbolo desconhecido do vetor válido Result:= False; msg:= msg12; end else if ponto2 = 36 then begin //Depois do ponto há um símbolo desconhecido do vetor válido Result:= False; msg:= msg13; end end; //Verificação final if not Result then begin msg:= msg +#10+ 'Formato de E-mail não aceitável!!'; MessageDlg(msg,mtWarning,[mbRetry],0); end; end; {Os componentes devem ser configurados assim: O Form possui keypreview=true e evento onkeypress, o Edit possui evento onchange e o Button possui evento onclick. As procedures seguem abaixo} procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption:= ''; if Trim(Edit1.Text)<>'' then if (func_VerifEmail(Trim(Edit1.Text))) then begin Label1.Caption:= Trim(Edit1.Text)+' está OK.'+#10+'Formato aceitável.'; Button1.Enabled:= False; end else begin Button1.SetFocus; Edit1.SetFocus; Edit1.SelText; end end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then Button1Click(Sender); if (not ((Key in ['0'..'9']) or (Key in ['A'..'Z']) or (Key in ['a'..'z']) or (Key = '@') or (Key = '.') or (Key = '-'))) then Key:= #0; end; procedure TForm1.Edit1Change(Sender: TObject); begin Label1.Caption:= ''; Button1.Enabled:= True; end; //Ligue os eventos corretamente e verifique o resultado Sds, Romario Sérgio Rodrigo Alves Silva escreveu: > > Bom Dia Galera... > > Alguém tem uma função ou procedimento q valide um endereço de e-mail? > > Obrigado! -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html