vv-jsdt
Version:
validate based on vue2
70 lines (62 loc) • 2.09 kB
JavaScript
/**
* Created by chunyang.gao on 17/4/14.
*/
import { is } from './util';
export function check(rule, field, value, isArray) {
if (Array.isArray(rule)) {
return rule.map(item => check.call(this, item, field, value, true)).indexOf(false) === -1;
}
let vm = this;
const $rules = this.VV.$rules;
const $errors = this.VV.$errors;
const regex = is('String', rule) ? $rules[rule] : is('String', rule.test || rule.remote) ? $rules[rule.test] : rule;
if (!regex) {
console.warn(' rule does not exist: ' + (rule.test || rule.toString()));
return;
}
if (!regex.test && !regex.remote) {
console.warn(' rule does not exist: ' + (rule.test || rule.remote));
return;
}
regex.message = rule.message || regex.message;
let valid = true;
if (is('Function', regex.test)) {
valid = regex.test.call(this, value);
} else if (is('Function', regex.remote)) {
var _self = this;
regex.remote.call(this, value, function (bol) {
if (bol) {
valid = true;
vm.$delete($errors, field);
} else {
console.log(_self);
valid = false;
vm.$set($errors, field, regex.message);
}
});
} else {
valid = regex.test.test(value);
}
if (isArray) {
const oldError = $errors[field];
if (valid) {
vm.$delete($errors, field);
} else if (!oldError) {
$errors[field] = regex.message;
}
} else {
const error = $errors[field] || [];
const oldError = error.indexOf(regex.message);
if (valid) {
oldError > -1 && error.splice(oldError, 1);
if (!error.length) vm.$delete($errors, field);
} else if (oldError < 0) {
error.push(regex.message);
vm.$set($errors, field, error);
}
}
const hasError = Boolean(Object.keys($errors).length);
this.VV.valid = !hasError;
this.VV.invalid = hasError;
return valid;
}