vue-form
Version:
Form validation for Vue.js
67 lines (59 loc) • 1.8 kB
JavaScript
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;
}
};