Применение регулярных выражений для проверки (валидации) данных известно давно. Во времена среды разработки Delphi 7 не было встроенной библиотеки для работы с регулярными выражениями, поэтому подключали сторонние. Начиная с современной реализации Delphi от Embarcadero такая возможность появилась, если объявить в uses
разделе System.RegularExpressions
. Регулярные выражения (их еще называют regexp, или regex) — это механизм для поиска и замены текстовых значений на основе паттерна в виде специальной символьной записи.
Давайте создадим простую функцию проверки строки на валидность, указываемого пользователем IP адреса. Сначала определимся с паттерном.
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
Объявим функцию в блоке public
public
{ Public declarations }
function validationIP(ipvalue : string) : boolean;
Теперь напишем и объявим функцию (в нашем случае в области TForm1
):
function TForm1.validationIP(ipvalue: string): boolean;
var
regIP: TRegEx;
Match: TMatch;
begin
if regIP.IsMatch(ipvalue,
'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')
then
Result := true
else
Result := false;
end;
Функция готова к вызову для проверки валидности IP адресов (IPv4). В моей практике я указывал для поля ввода текстовой информации TEdit
на событие OnChange
. Валидность визуально для пользователя описал на визуализацию картинки imgCheck
в виде "галочки" рядом с полем ввода.
procedure TForm1.eIPChange(Sender: TObject);
begin
if validationIP(eIP.Text)=true then
imgCheck.Visible :=true else imgCheck.Visible :=false;
end;
или еще проще записать так:
imgCheck.Visible := validationIP(eIP.Text);
При некорректном значении ничего не показываем:
При корректном значении показать "галочку"
Но обыграть валидность в интерфейсе формы можно по-разному, как сами понимаете.
P.S. В давние времена у меня была задача выявления и получения с веб-страницы, анализируя HTML код, ссылки на стрим-запись ежедневных новостей большой компании и запуска автоматической трансляции в региональном филиале этой компании. И регулярные выражения очень удачно помогли решить эту проблему. Алгоритм был достаточной простой: загружаем страницы с новостями с сервера компании каждый день, ищем наличие URL на запись, загружаем на свой сервер запись (это был всегда файл .wav), создаем список (=плейлист) и запускаем медиаплеер с трансляцией на линию главного офиса филиала. Записей могло быть несколько в рамках одной новостной повестки. 😀