Avatar billede moller2567 Nybegynder
11. oktober 2005 - 12:42 Der er 7 kommentarer og
1 løsning

Validering af e-mail adresse

Kode til validering af e-mailadresser.

Det er et felt i et grid, hvor brugere skal indtaste e-mail adresser. Men jeg ville gerne kunne afvise adresser, hvor syntaksen ikke er korrekt.

Jeg skal bruge en funktion, der tjekker e-mail adressen, eller en "mask" til et InfoPower 4 grid.
Avatar billede vallemanden Nybegynder
11. oktober 2005 - 12:55 #1
function MailURLMayBeInvalid(const s: string): Boolean;
var
  i: Integer;
  c: string;
begin // ' ', ä, ö, ü, ß, [, ], (, ), : in EMail-Address
  Result := (Trim(s) = '') or (Pos(' ', AnsiLowerCase(s)) > 0) or
    (Pos('ä', AnsiLowerCase(s)) > 0) or (Pos('ö', AnsiLowerCase(s)) > 0) or
    (Pos('ü', AnsiLowerCase(s)) > 0) or (Pos('ß', AnsiLowerCase(s)) > 0) or
    (Pos('[', AnsiLowerCase(s)) > 0) or (Pos(']', AnsiLowerCase(s)) > 0) or
    (Pos('(', AnsiLowerCase(s)) > 0) or (Pos(')', AnsiLowerCase(s)) > 0) or
    (Pos(':', AnsiLowerCase(s)) > 0);
  if Result then Exit; // @ not in EMail-Address;
  i      := Pos('@', s);
  Result := (i = 0) or (i = 1) or (i = Length(s));
  if Result then Exit;
  Result := (Pos('@', Copy(s, i + 1, Length(s) - 1)) > 0);
  if Result then Exit; // Domain <= 1
  c      := Copy(s, i + 1, Length(s));
  Result := Length(c) <= 1;
  if Result then Exit;
  i      := Pos('.', c);
  Result := (i = 0) or (i = 1) or (i = Length(c));
end;
Avatar billede moller2567 Nybegynder
11. oktober 2005 - 13:26 #2
Det var godt og hurtigt svar. Tak for hjælpen.

Eneste kommentar er, at der der mangler æ, ø og å i tegn, der ikke må være der, eller er det blevet tilladt ?

Og så kan jeg se, at der ikke er nogen kontrol på antallet af tegn efter det sidste punktum. Jeg mener at det maks kan være 3, eller er der nogen mailadresser, der har 4 ?
Avatar billede vallemanden Nybegynder
11. oktober 2005 - 15:10 #3
ddddd@fff.co.uk
Avatar billede moller2567 Nybegynder
13. oktober 2005 - 11:03 #4
Nu har jeg lavet min egen valideringsfunktion på dansk, lidt ud fra den viste (på tysk) og lidt ud fra reglerne om e-mail adresser på nedenstående link (regular expression til java Script validering)

// http://www.sitebilder.com/design/tutorial/mini/js/RegExp/email1.php

Her er så min version hvis der er nogen, der kunne have glæde af den. De fylder lidt mere, men så er der også en forklaring til brugeren af hvad der er galt.

function TForm1.KontrollerMail(Adresse : string): Boolean;
var
  delTOMsnabelA, delEfterSnabelA, SidsteDel : String;
  Laengde, i, SidstePunktumPos : integer;
begin
  Result := True;

  Laengde := Length(Adresse);
  // Kontrol for ugyldige tegn
  for i := 1 to Laengde do
  begin
    // Positionen af det sidste punktum skal gemmes til senere
    if (CharAt(Adresse, i) = '.') then
      SidstePunktumPos := i;

    if not ErTegnTilladt(CharAt(Adresse, i)) then
    begin
      Result := False;
      Showmessage('Ugyldigt tegn i adressen: "' + CharAt(Adresse, i) + '"');
      Exit;
    end;
  end;

  // der skal være @ i
  if (Pos('@', Adresse) > 0) then
  begin
    delTOMsnabelA := Copy(Adresse, 1, Pos('@', Adresse));
    delEfterSnabelA := Copy(Adresse, Pos('@', Adresse) + 1, Length(Adresse));
  end
  else
  begin
    Result := False;
    Showmessage('Der skal være ét @ i adressen');
    Exit;
  end;

  // der må ikke være mere end et @
  if (Pos('@', delEfterSnabelA) > 0) then
  begin
    Result := False;
    Showmessage('Der må kun være ét @ i adressen');
    Exit;
  end;

  // Første del inkl. @ skal være mindst 2 tegn lang (det andet er @)
  if (Length(delTOMsnabelA) < 2) then
  begin
    Result := False;
    Showmessage('Adressen må ikke starte med @');
    Exit;
  end;

  // Der skal være et punktum i delen efter @, og det må ikke være første tegn
  if (Pos('.', delEfterSnabelA) < 2) then
  begin
    Result := False;
    Showmessage('Intet punktum i delen efter @');
    Exit;
  end;

  SidsteDel := Copy(Adresse, SidstePunktumPos + 1, Length(Adresse));
  if ((Length(SidsteDel) < 2) or (Length(SidsteDel) > 4)) then
  begin
    Result := False;
    Showmessage('Efter det sidste punktum skal der være mellem 2 og 4 tegn');
    Exit;
  end;

end;

function TForm1.ErTegnTilladt(Tegn : Char): Boolean;
begin
  if Tegn in ['0'..'9', 'a'..'z', 'A'..'Z', '-', '@', '.'] then
    result := True
  else
    result := False;
end;

function TForm1.CharAt(var S: string; APos: Integer): Char;
begin
  Result := #0;
  if (Length(s) < APos) or (apos < 1) then Exit;
  Result := s[APos];
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if KontrollerMail(Edit1.Text) then
    Showmessage('Adresse OK')
  else
    Showmessage('Adresse IKKE OK');

end;
Avatar billede moller2567 Nybegynder
13. oktober 2005 - 11:22 #5
Hovsa, der manglede lige "_" i listen over tilladte tegn:

function TForm1.ErTegnTilladt(Tegn : Char): Boolean;
begin
  if Tegn in ['0'..'9', 'a'..'z', 'A'..'Z', '-', '@', '.', '_'] then
    result := True
  else
    result := False;
end;
Avatar billede tolderlund Nybegynder
13. oktober 2005 - 13:19 #6
Top level domæner kan være på mere end 4 tegn, ifølge disse sider:
http://en.wikipedia.org/wiki/Generic_top-level_domain
http://www.norid.no/domenenavnbaser/domreg.html
Avatar billede moller2567 Nybegynder
13. oktober 2005 - 13:31 #7
Det var pokkers.

Nå men hører .museum eller .travel til kundegruppen, så skal længdekontrollen ændres til:
if ((Length(SidsteDel) < 2) or (Length(SidsteDel) > 4)) then

Tak for tippet.
Avatar billede tolderlund Nybegynder
13. oktober 2005 - 14:22 #8
Jeg var egentlig i tvivl om det er nogen domæner der virkelig eksisterer, men det lykkedes mig at finde en :-)
http://icom.museum/
Og med emailadresse:
http://icom.museum/contactus.html
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester