import {ReactiveSelectInputSelect} from "../../components/custom/controls/ReactiveControls"; export const required = (value: any, field = 'Поле') => { const message = `${field} обязательно для заполнения`; if (!value) { return message; } else if (typeof value === 'string' && (value.trim().length === 0)) { return message; } else if (Array.isArray(value) && value.length === 0) { return message; } } export const selected = (value: ReactiveSelectInputSelect, field = 'Поле') => { if (!value.value || value.value === '__unselected__') { return `${field} должно быть выбрано`; } } export const equals = (expected: any) => (value: any, field = 'Поле') => { if (value && value !== expected) { return `${field} должно быть равно ${expected}`; } } export const number = (value: string, field = 'Поле') => { if (!/^\d+$/.test(value)) { return `${field} должно быть числом`; } } export const numGreaterThan = (min: number) => (value: number, field = 'Значение') => { if (value && value <= min) { return `${field} должно быть больше ${min}`; } } export const numLessThan = (max: number) => (value: number, field = 'Значение') => { if (value && value >= max) { return `${field} должно быть меньше ${max}`; } } export const strLength = (min: number, max: number) => (value: string, field = 'Поле') => { if (value && (value.length < min || value.length > max)) { return `${field} должно содержать от ${min} до ${max} символов`; } } export const strPattern = (regexp: RegExp, message: string) => (value: string, field = '') => { if (!regexp.test(value)) { return message; } } export const email = (value: string, field = 'Поле') => { // валидация email очень сложная, и этот паттерн не учитывает многие валидные адреса, но используется в Google if (!/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(value)) { return `${field} должно быть корректным адресом электронной почты`; } } export const emailChars = (value: string, field = 'Поле') => { if (!/^[a-zA-Z\d@._-]*$/.test(value)) { return `${field} должно содержать только латинские буквы, цифры и символы @._-`; } } export const phone = (value: string, field = 'Поле') => { if (!/^\+[1-9]\d{6,14}$/.test(value)) { return `${field} должно быть корректным номером телефона`; } } export const phoneChars = (value: string, field = 'Поле') => { if (!/^\+\d*$/.test(value)) { return `${field} должно содержать только цифры и символ +`; } } export const loginChars = (value: string, field = 'Поле') => { if (!/^[a-zA-Z\d_]*$/.test(value)) { return `${field} должно содержать только латинские буквы, цифры и знак подчеркивания`; } } export const loginLength = (value: string, field = 'Поле') => { if (value.length < 5 || value.length > 32) { return `${field} должно содержать от 5 до 32 символов`; } } export const loginMaxLength = (value: string, field = 'Поле') => { if (value.length > 32) { return `${field} должно содержать не более 32 символов`; } } export const password = (value: string, field = 'Поле') => { if (!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d!@#$%^&*]*$/.test(value)) { return `${field} должен содержать хотя бы одну цифру, одну заглавную и одну строчную букву`; } } export const passwordMaxLength = (value: string, field = 'Поле') => { if (value.length > 32) { return `${field} должно содержать не более 32 символов`; } } export const passwordLength = (value: string, field = 'Поле') => { if (value.length < 8 || value.length > 32) { return `${field} должно содержать от 8 до 32 символов`; } } export const passwordChars = (value: string, field = 'Поле') => { if (!/^[a-zA-Z\d!@#$%^&*]*$/.test(value)) { return `${field} должен содержать только латинские буквы, цифры и специальные символы`; } } export const nameChars = (value: string, field = 'Поле') => { if (!/^[a-zA-Zа-яА-ЯёЁ\s]+$/.test(value)) { return `${field} должно содержать только буквы английского или русского алфавита и пробелы`; } } export const nameLength = (value: string, field = 'Поле') => { if (value.length < 3) { return `${field} должно содержать минимум 3 символа`; } } export const date = (value: string, field = 'Поле') => { if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) { return `${field} должно быть датой в формате ГГГГ-ММ-ДД`; } } export const time = (value: string, field = 'Поле') => { if (!/^\d{2}:\d{2}$/.test(value)) { return `${field} должно быть временем в формате ЧЧ:ММ`; } } export const dateTime = (value: string, field = 'Поле') => { if (!/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/.test(value)) { return `${field} должно быть датой и временем в формате ГГГГ-ММ-ДД ЧЧ:ММ`; } }