export class FieldCheck { error = ""; constructor(error: string) { this.error = error; } check(val: string) { throw new Error("check() not implemented"); return ""; } } class FieldCheckRegex extends FieldCheck { regex = /none/; constructor(regex: RegExp, error: string) { super(error); this.regex = regex; } check(val: string) { if (!this.regex.test(val)) return this.error; return ""; } } class FieldCheckMaxLength extends FieldCheck { maxLength = 0; constructor(maxLength: number) { super(`Максимальная длина равна ${maxLength}.`); this.maxLength = maxLength; } check(val: string) { if (val.length > this.maxLength) return this.error; return ""; } } class FieldCheckMinLength extends FieldCheck { minLength = 0; constructor(minLength: number) { super(`Минимальная длина равна ${minLength}.`); this.minLength = minLength; } check(val: string) { if (val.length < this.minLength) return this.error; return ""; } } export class FieldChecks { static nonEmpty = new FieldCheckRegex(/\S+/, "Поле не может быть пустым."); static onlyLatinLettersWhitespaces = new FieldCheckRegex(/^[A-Za-z\s]+$/, "Разрешены только Латинские буквы и пробелы."); static onlyLettersWhitespaces = new FieldCheckRegex(/^[A-Za-zА-Яа-я\s]+$/, "Разрешены только буквы и пробелы."); static onlyLatinLettersNumbersUnderscores = new FieldCheckRegex( /^[A-Za-z0-9_\s]+$/, "Разрешены только Латинские буквы, цифры и нижнее подчёркивание." ); static email = new FieldCheckRegex(/^[^\s@]+@[^\s@]+\.[^\s@]+$/, "Проверьте почтовый адрес."); static noSpecialChars = new FieldCheckRegex(/^[A-Za-z0-9\s.,()!%]+$/, "Специальные символы не разрешены."); static maxLength = (maxLength: number) => new FieldCheckMaxLength(maxLength); static minLength = (minLength: number) => new FieldCheckMinLength(minLength); }