meine Suche nach einer Möglichkeit einen String auf seine Gültigkeit als URL zu prüfen, endete mehr oder weniger erfolglos.
Also habe ich mal selbst eine Unit geschrieben, die das möglichst flott und ohne die Einbindung aufwändiger Bibliotheken erledigt.
Zur Anwendung kommt das ganze in meinem Texteditor. Wird eine Textstelle ausgewählt, die eine gültige URL darstellt, wird ein Menüpunkt aktiv der, per OpenURL(), die Seite im Browser öffnet.
Getestet habe ich das Ganze mit den Bookmarks aus meinem Browser. So weit so gut.
Anbei die Unit und eine Testprogramm zur freien Verwendung, mit der Bitte um Rückmeldung wenn's irgendwo klemmt.
MfG Roland
Code: Alles auswählen
unit rhsIsValidURL;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
function IsValidURL(const sURL: String): Boolean;
implementation
function IsValidURL(const sURL: String): Boolean;
var
i: Integer;
p: Integer;
TypList: TStringList;
PartList: TStringArray;
sTyp: String = '';
sAdress: String = '';
sForbidden: String = ' :?#[]@!$&()*+,;=.' + #39;
begin
Result := False;
if Pos(RightStr(sURL, 1), sForbidden) > 0 then
Exit(False);
TypList := TStringList.Create;
TypList.Add('https://www.');
TypList.Add('http://www.');
TypList.Add('https://');
TypList.Add('http://');
TypList.Add('www.');
for i := 0 to TypList.Count - 1 do
begin
if Pos(TypList[i], Lowercase(sURL)) = 1 then
begin
sTyp := TypList[i];
Break;
end;
end;
TypList.Free;
if sTyp > '' then
begin
sAdress := Copy(sURL, Length(sTyp) + 1, 255);
p := Pos('/', sAdress);
if p > 0 then
sAdress := LeftStr(sAdress, p - 1);
PartList := sAdress.Split('.');
if High(PartList) = 0 then
Exit(False);
for i := 0 to High(PartList) do
begin
if PartList[i] > '' then
begin
Result := True;
for p := 1 to Length(sForbidden) do
begin
if Pos(sForbidden[p], PartList[i]) > 0 then
Exit(False);
end;
end;
end;
end;
end;
end.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
uses
rhsIsValidURL, lclintf;
{$R *.lfm}
{ TForm1 }
procedure TForm1.Edit1Change(Sender: TObject);
begin
Button1.Enabled := IsValidURL(Edit1.Text);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenURL(Edit1.Text);
end;
end.