Регулярные выражения в JS
Задание:
Разработать RegExp позволяющее определить валидность строки, параметры валидности:
Строка должна начинаться с 0 или 1, и состоять из последовательности трех или четырех 0 и 1, продолжение строки может состоять из любых символов.
Примеры:
101 - Валидна
1010 - Валидна
10100 - Не валидна
101-101 - Валидна
2111 - Не валидна
Был разработан следующий RegExp:
^[10]{3,4}([^10]+.*|[^10]*)$
Проверить правильность RegExp можно используя INPUT расположенный ниже, который окрашиваться в красный или зеленый цвет в зависимости от валидности введенной строки.
Код:
<input type="text" id="Input" value="101" oninput="InputChange(event)"> <script> function IsValid(s) { return /^[10]{3,4}([^10]+.*|[^10]*)$/.test(s); } function InputChange(event) { if (IsValid(event.target.value)) event.target.style.backgroundColor = 'green'; else event.target.style.backgroundColor = 'red'; } document.getElementById('Input').dispatchEvent(new Event('input')); </script>
Аналогичная программа на ObjectPascal(Delphi):
Разметка формы:object RegExpForm: TRegExpForm Left = 0 Top = 0 Caption = 'RegExpForm' ClientHeight = 53 ClientWidth = 253 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate DesignSize = ( 253 53) PixelsPerInch = 96 TextHeight = 13 object Input: TLabeledEdit Left = 8 Top = 24 Width = 237 Height = 21 Anchors = [akLeft, akRight, akBottom] AutoSelect = False Ctl3D = True EditLabel.Width = 26 EditLabel.Height = 13 EditLabel.Caption = 'Input' ParentCtl3D = False TabOrder = 0 Text = '101' OnChange = InputChange end end
Код:
unit Main; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, System.UITypes; type TRegExpForm = class(TForm) Input: TLabeledEdit; procedure InputChange(Sender: TObject); procedure FormCreate(Sender: TObject); end; var RegExpForm: TRegExpForm; implementation {$R *.dfm} uses System.RegularExpressions; function IsValid(S: string): Boolean; begin Result := TRegEx.IsMatch(S, '^[10]{3,4}([^10]+.*|[^10]*)$'); end; procedure TRegExpForm.FormCreate(Sender: TObject); begin InputChange(Input); end; procedure TRegExpForm.InputChange(Sender: TObject); begin if IsValid(TEdit(Sender).Text) then TEdit(Sender).Color := TColors.Lightgreen else TEdit(Sender).Color := TColors.Lightcoral; end; end.
Скриншоты работы:
Репозиторий программы, и скомпилированный EXE файл: https://github.com/AnotherStudent/RegExpValidationSample




Комментариев нет:
Отправить комментарий