unit RegularExpressionsMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, uDADataTable, uDACDSDataTable, ExtCtrls, DBCtrls, Grids, DBGrids, uDAScriptingProvider; type TRegExpressionTemplate = record Description, RegExpression: string; end; const RegExpressionTemplates: array[0..6] of TRegExpressionTemplate = ( (Description: 'US Phone Number'; RegExpression: '^\d{3}-(\d{2}-\d{2}|\d{4})'), (Description: 'Email'; RegExpression: '[_a-zA-Z\d\-\.]+@([_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+)'), (Description: 'Real Number'; RegExpression: '^[+\-]?\d+(\.\d+)?([eE][+\-]?\d+)?$'), (Description: 'Roman Number'; RegExpression: '^(?i)M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$'), (Description: 'URL'; RegExpression: '(?i)(FTP|HTTP)://([_a-z\d\-]+(\.[_a-z\d\-]+)+)((/[ _a-z\d\-\\\.]+)+)*'), (Description: 'ZipCode'; RegExpression: '^\d{5}$'), (Description: 'Path'; RegExpression: '[A-Za-z]:(\\[a-zA-Z0-9_]+)+')); type TRegularExpressionsMainForm = class(TForm) GroupBox1: TGroupBox; cbExpression: TComboBox; eText: TEdit; bCheck: TButton; lbResult: TLabel; eExpression: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; DACDSDataTable: TDACDSDataTable; DADataSource: TDADataSource; DBGrid1: TDBGrid; Label4: TLabel; procedure bCheckClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure cbExpressionChange(Sender: TObject); procedure DBGrid1CellClick(Column: TColumn); private { Private declarations } procedure SetupTable; public { Public declarations } end; var RegularExpressionsMainForm: TRegularExpressionsMainForm; implementation uses uDARegExpr; {$R *.dfm} procedure TRegularExpressionsMainForm.bCheckClick(Sender: TObject); begin if ExecRegExpr(eExpression.Text, eText.Text) then begin lbResult.Caption := 'The text is valid!' end else begin Beep; lbResult.Caption := 'The text is INVALID!' end; end; procedure TRegularExpressionsMainForm.FormCreate(Sender: TObject); var i: integer; begin for i := 0 to High(RegExpressionTemplates) do cbExpression.Items.Add(RegExpressionTemplates[i].Description); cbExpression.ItemIndex := 0; cbExpressionChange(nil); SetupTable; end; procedure TRegularExpressionsMainForm.cbExpressionChange(Sender: TObject); begin eExpression.Text := RegExpressionTemplates[cbExpression.ItemIndex].RegExpression end; procedure TRegularExpressionsMainForm.DBGrid1CellClick(Column: TColumn); begin if (Column.Index >= 0) and (Column.Index < cbExpression.Items.Count) then begin cbExpression.ItemIndex := Column.Index; cbExpressionChange(cbExpression); end; eText.Text := DACDSDataTable.Fields[Column.Index].AsString; end; procedure TRegularExpressionsMainForm.SetupTable; begin with DACDSDataTable do begin Open; First; // valid record Insert; FieldByName('USPhoneNumber').AsString := '123-45-67'; FieldByName('Email').AsString := 'test@test.com'; FieldByName('RealNumber').AsString := '-12e+10'; FieldByName('RomanNumber').AsString := 'MCXX'; FieldByName('URL').AsString := 'http://www.site.com'; FieldByName('ZipCode').AsString := '12345'; FieldByName('path').AsString := 'c:\file.exe'; post; // invalid Insert; FieldByName('USPhoneNumber').AsString := '12-145-67'; FieldByName('Email').AsString := 'test@testcom'; FieldByName('RealNumber').AsString := '-12e'; FieldByName('RomanNumber').AsString := 'MCXX1'; FieldByName('URL').AsString := 'http:/www.site.com'; FieldByName('ZipCode').AsString := '23 45'; FieldByName('path').AsString := '\file.exe'; post; // mixed Insert; FieldByName('USPhoneNumber').AsString := '101-15-6917'; FieldByName('Email').AsString := 'test@test.test.com'; FieldByName('RealNumber').AsString := '-12'; FieldByName('RomanNumber').AsString := 'IXM'; FieldByName('URL').AsString := 'www.site.com'; FieldByName('ZipCode').AsString := '0192'; FieldByName('path').AsString := 'z:\folder\'; post; // mixed Insert; FieldByName('USPhoneNumber').AsString := '101.15.6917'; FieldByName('Email').AsString := 'test#test.com'; FieldByName('RealNumber').AsString := '+1212'; FieldByName('RomanNumber').AsString := 'MCIX'; FieldByName('URL').AsString := 'http://www.site.com/files/program.zip'; FieldByName('ZipCode').AsString := '192911'; FieldByName('path').AsString := 'z:\folder\subfolder\program.exe'; post; end; end; end.