TDMS/web/src/utils/reactive/validators.ts
Maksim Skobaro fdacbbfd8f Improvements
2025-02-15 02:32:20 +03:00

151 lines
5.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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