diff --git a/client/src/Shared/validator.js b/client/src/Shared/validator.js new file mode 100644 index 0000000000000000000000000000000000000000..04f857b76448698b707cfaa2cf893e4f003ed669 --- /dev/null +++ b/client/src/Shared/validator.js @@ -0,0 +1,98 @@ +/** + * Chek if email is valid + * @prop String email + * @returns Boolean + */ +export const isEmail = (email) => { + const re = /^(([^<>()[\]\\.,;:\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,}))$/; + return re.test(email); +} + +/** + * Chek if vatiable is empty + * @prop String thing + * @returns Boolean + */ +export const isEmpty = (thing) => { + let empty = false; + + switch (typeof thing) { + case 'undefined': + empty = true; + break; + case 'string': + if (thing.trim().length === 0) { + empty = true; + } + break; + case 'object': + if (thing === null) { + empty = true; + } else if (Object.keys(thing).length === 0) { + empty = true; + } + break; + default: + empty = true; + } + + return empty; +} + +/** + * Check length of the string greater than + * @prop String|Integer str + * @prop boolean|options.trim Trim input before validating + * @prop number|options.lt Check if length less than lt + * @prop number|options.lte Check if length is less than or equals to lte + * @prop number|options.gt Check if length is greater than gt + * @prop number|options.gte Check if length is greater than or equals to gte + * @returns Boolean + */ +export const isLength = (str, options) => { + + if (isEmpty(options)) { + throw new Error("Who will provide the options you?") + } + + let isValid = true; + + if (['string', 'number'].indexOf(typeof str) === -1) { + isValid = false; + } else { + // Convert to string incase it's number + let len = 0; + + if(options.trim){ + len = str.toString().trim().length; + } else { + len = str.toString().length; + } + + if (typeof options.lt === 'number' && len >= options.lt) { + isValid = false; + } else if (typeof options.lte === 'number' && len > options.lte) { + isValid = false; + } else if (typeof options.gt === 'number' && len <= options.gt) { + isValid = false; + } else if (typeof options.gte === 'number' && len < options.gte) { + isValid = false; + } + } + + return isValid; +} + +/** + * Check if string contains whitespaces + * @prop String str + * @returns Boolean + */ +export const isContainWhiteSpace = (str) => { + + if(typeof str === 'string' || typeof str === 'number'){ + return str.toString().trim().indexOf(' ') !== -1; + } else { + return false; + } +} \ No newline at end of file