export interface IValidationRules { password: (value: string) => boolean email: (value: string) => boolean min: (value: any, minimum: number) => boolean max: (value: any, maximum: number) => boolean phone: (value: string) => boolean required: (value: any) => boolean [key: string]: any } export default { password: (password: string): boolean => { if (password.length < 12) return false else if (password.search(/\d/) === -1) return false else if (password.search(/[a-z]/) === -1) return false else if (password.search(/[A-Z]/) === -1) return false else return password.search(/[\!\@\#\$\%\^\&\*\(\)\_\+]/) !== -1 }, email: (value: string): boolean => { const isEmail = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i return isEmail.test(value) }, min: (value: any, minimum = 1): boolean => { if (Array.isArray(value)) { minimum = !isNaN(minimum) ? Number(minimum) : minimum return value.length >= minimum } if (typeof value === 'string') { if (!value.length) return true return value.length >= minimum } if (!isNaN(value)) { value = !isNaN(value) ? Number(value) : value return value >= minimum } return false }, max: (value: any, maximum = 10): boolean => { if (Array.isArray(value)) { maximum = !isNaN(maximum) ? Number(maximum) : maximum return value.length <= maximum } if (typeof value === 'string') return value.length <= maximum if (!isNaN(value)) { value = !isNaN(value) ? Number(value) : value return value <= maximum } return false }, phone: (value: string): boolean => { const isPhone = /^\d+$/ return isPhone.test(value) }, required: (value: any): boolean => { if (Array.isArray(value)) return !!value.length if (typeof value === 'string') return !!value return value }, valueAbove: (value: any, minimum: number | undefined): boolean => { if (!isNaN(value) && typeof value !== 'string') value = Number(value) return !(minimum !== undefined && value < Number(minimum)) }, valueBelow: (value: any, maximum: number | undefined): boolean => { if (!isNaN(value) && typeof value !== 'string') value = Number(value) return !(maximum !== undefined && value > Number(maximum)) }, } as IValidationRules