UNPKG

vue-form

Version:

Form validation for Vue.js

67 lines (59 loc) 1.8 kB
const emailRegExp = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i; // from angular const urlRegExp = /^(http\:\/\/|https\:\/\/)(.{4,})$/; const email = function (value, attrValue, vnode) { return emailRegExp.test(value); } email._allowNulls = true; const number = function (value, attrValue, vnode) { return !isNaN(value); } number._allowNulls = true; const url = function (value, attrValue, vnode) { return urlRegExp.test(value); } url._allowNulls = true; export const validators = { email, number, url, required(value, attrValue, vnode) { if (attrValue === false) { return true; } if (value === 0) { return true; } if ((vnode.data.attrs && typeof vnode.data.attrs.bool !== 'undefined') || (vnode.componentOptions && vnode.componentOptions.propsData && typeof vnode.componentOptions.propsData.bool !== 'undefined')) { // bool attribute is present, allow false pass validation if (value === false) { return true; } } if (Array.isArray(value)) { return !!value.length; } return !!value; }, minlength(value, length) { return value.length >= length; }, maxlength(value, length) { return length >= value.length; }, pattern(value, pattern) { const patternRegExp = new RegExp('^' + pattern + '$'); return patternRegExp.test(value); }, min(value, min, vnode) { if ((vnode.data.attrs.type || '').toLowerCase() == 'number') { return +value >= +min; } return value >= min; }, max(value, max, vnode) { if ((vnode.data.attrs.type || '').toLowerCase() == 'number') { return +max >= +value; } return max >= value; } };