151 lines
5.9 KiB
TypeScript
151 lines
5.9 KiB
TypeScript
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} должно быть датой и временем в формате ГГГГ-ММ-ДД ЧЧ:ММ`;
|
||
}
|
||
} |