I use TRegEx
var
FoundMatch: Boolean;
FoundMatch := False;
try
FoundMatch := TRegEx.IsMatch(S, '\A\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b\z', [roIgnoreCase]);
except
on E: ERegularExpressionError do
begin
// Syntax error in the regular expression
end;
end;