Delphi - IP cím ellenőrző függvény készítése

forráskód letöltése
Ebben a cikkben megvalósítunk egy függvényt, mely egy paraméterül kapott IP címről eldönti, hogy az valódi-e vagy sem. A függvény felhasználásával tetszőleges string típusú adatról eldönthető, hogy megfelel-e az IP címekre vonatkozó tartalmi és formai szabályoknak.
A példában egy egyszerű TEdit típusú vezérlőben lehet megadni a vizsgálandó IP címet reprezentáló karakterláncot, amelyet az IsValidIPAddress nevű függvény dolgoz fel. Az IsValidIPAddress függvény a következő jellemzőkkel rendelkezik:
IsValidIPAddress
Function IsValidIPAddress(Value:string):Boolean;
Paraméterek
Value:string
Az IP címet tartalmazó változó.
Visszatérési érték
A függvény helyes IP címet tartalmazó string esetén true értékkel tér vissza, egyébként false.
A függvény a karakterláncot szegmensekre bontja, ezeket egy karakterláncokat tároló listába teszi. A listát a művelet elején létre kell hozni:
IPlist := TStringList.Create;
A karakterlánc vizsgálatakor a legkézenfekvőbb módszer a karakterek egyenkénti feldolgozása. Minden karakterről megállapítható, hogy értéke megfelel-e a kritériumoknak az adott pozícióban. Az egyes vizsgálatok beállítanak egy logikai változót, mely a függvény visszatérési értéke lesz. A karakterlánc elemein végigmenő ciklus a következő vizsgálati feltételeket tartalmazza:
  • Az adott karakter része-e az IP címek esetén megengedett karakterek halmazának. A megengedett karakterek: ’.’ karakter, ’0’...’9’ szám karakterek.
. . .
if not (Value[i] in segchar) then
begin
  b:=false;
  break;
end;
  • A karakterlánc első és utolsó eleme nem lehet ’.’ karakter.
if (Value[i]='.') and ((i=1) or (i=Length(Value))) then begin
  b:=false;  break;
end;
  • Ha a formai szempontok érvényesülnek, a karakterlánc elemeit 4 karakterláncra bontjuk és felfűzzük a listára. A művelet végén a lista memóriaterületét felszabadítjuk.
if Value[i]='.' then
begin
  IPlist.Add(IPSegment);
  IPSegment:='';
end
else
begin
  IPSegment:=IPSegment+Value[i];
end;
. . .
IPlist.Add(IPSegment);
s := 0;
if (IPlist.Count <> 4) then b:=false;
  for j:=0 to IPlist.Count-1 do
    begin
      s := StrToInt(IPlist.Strings[j]);
      if (s>255) or ((IPlist.Strings[j][1] = '0') and (Length(IPlist.Strings[j]) > 1)) then
        begin
          b:=false;
          break;
        end;
    end;
IPlist.Free;
A függvény az alkalmazásban a Form-on található gomb megnyomásakor hajtódik végre.