UNPKG

amis

Version:

一种MIS页面生成工具

225 lines (224 loc) 11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var tpl_1 = require("./tpl"); var isExisty = function (value) { return value !== null && value !== undefined; }; var isEmpty = function (value) { return value === ''; }; var makeRegexp = function (reg) { if (reg instanceof RegExp) { return reg; } else if (/\/(.+)\/([gimuy]*)/.test(reg)) { return new RegExp(RegExp.$1, RegExp.$2 || ''); } else if (typeof reg === 'string') { return new RegExp(reg); } return /^$/; }; exports.validations = { isRequired: function (values, value) { return value !== undefined && value !== '' && value !== null && (!Array.isArray(value) || !!value.length); }, isExisty: function (values, value) { return isExisty(value); }, matchRegexp: function (values, value, regexp) { return !isExisty(value) || isEmpty(value) || makeRegexp(regexp).test(value); }, isUndefined: function (values, value) { return value === undefined; }, isEmptyString: function (values, value) { return isEmpty(value); }, isEmail: function (values, value) { return exports.validations.matchRegexp(values, value, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i); }, isUrl: function (values, value) { return exports.validations.matchRegexp(values, value, /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i); }, isTrue: function (values, value) { return value === true; }, isFalse: function (values, value) { return value === false; }, isNumeric: function (values, value) { if (typeof value === 'number') { return true; } return exports.validations.matchRegexp(values, value, /^[-+]?(?:\d*[.])?\d+$/); }, isAlpha: function (values, value) { return exports.validations.matchRegexp(values, value, /^[A-Z]+$/i); }, isAlphanumeric: function (values, value) { return exports.validations.matchRegexp(values, value, /^[0-9A-Z]+$/i); }, isInt: function (values, value) { return exports.validations.matchRegexp(values, value, /^(?:[-+]?(?:0|[1-9]\d*))$/); }, isFloat: function (values, value) { return exports.validations.matchRegexp(values, value, /^(?:[-+]?(?:\d+))?(?:\.\d*)?(?:[eE][\+\-]?(?:\d+))?$/); }, isWords: function (values, value) { return exports.validations.matchRegexp(values, value, /^[A-Z\s]+$/i); }, isSpecialWords: function (values, value) { return exports.validations.matchRegexp(values, value, /^[A-Z\s\u00C0-\u017F]+$/i); }, isLength: function (values, value, length) { return !isExisty(value) || isEmpty(value) || value.length === length; }, equals: function (values, value, eql) { return !isExisty(value) || isEmpty(value) || value == eql; }, equalsField: function (values, value, field) { return value == values[field]; }, maxLength: function (values, value, length) { return !isExisty(value) || value.length <= length; }, minLength: function (values, value, length) { return !isExisty(value) || isEmpty(value) || value.length >= length; }, isUrlPath: function (values, value, regexp) { return !isExisty(value) || isEmpty(value) || /^[a-z0-9_\\-]+$/i.test(value); }, maximum: function (values, value, maximum) { return !isExisty(value) || isEmpty(value) || (parseFloat(value) || 0) <= (parseFloat(maximum) || 0); }, minimum: function (values, value, minimum) { return !isExisty(value) || isEmpty(value) || (parseFloat(value) || 0) >= (parseFloat(minimum) || 0); }, isJson: function (values, value, minimum) { if (isExisty(value) && !isEmpty(value)) { try { JSON.parse(value); } catch (e) { return false; } } return true; }, notEmptyString: function (values, value) { return !isExisty(value) || !(String(value) && String(value).trim() === ''); }, matchRegexp1: function (values, value, regexp) { return exports.validations.matchRegexp(values, value, regexp); }, matchRegexp2: function (values, value, regexp) { return exports.validations.matchRegexp(values, value, regexp); }, matchRegexp3: function (values, value, regexp) { return exports.validations.matchRegexp(values, value, regexp); }, matchRegexp4: function (values, value, regexp) { return exports.validations.matchRegexp(values, value, regexp); }, matchRegexp5: function (values, value, regexp) { return exports.validations.matchRegexp(values, value, regexp); }, matchRegexp6: function (values, value, regexp) { return exports.validations.matchRegexp(values, value, regexp); }, matchRegexp7: function (values, value, regexp) { return exports.validations.matchRegexp(values, value, regexp); }, matchRegexp8: function (values, value, regexp) { return exports.validations.matchRegexp(values, value, regexp); }, matchRegexp9: function (values, value, regexp) { return exports.validations.matchRegexp(values, value, regexp); } }; function addRule(ruleName, fn, message) { if (message === void 0) { message = ''; } exports.validations[ruleName] = fn; exports.validateMessages[ruleName] = message; } exports.addRule = addRule; exports.validateMessages = { isEmail: 'Email 格式不正确', isRequired: '这是必填项', isUrl: 'Url 格式不正确', isInt: '请输入整型数字', isAlpha: '请输入字母', isNumeric: '请输入数字', isAlphanumeric: '请输入字母或者数字', isFloat: '请输入浮点型数值', isWords: '请输入字母', isUrlPath: '只能输入字母、数字、`-` 和 `_`.', matchRegexp: '格式不正确, 请输入符合规则为 `${1|raw}` 的内容。', minLength: '请输入更多的内容,至少输入 $1 个字符。', maxLength: '请控制内容长度, 请不要输入 $1 个字符以上', maximum: '当前输入值超出最大值 $1,请检查', minimum: '当前输入值低于最小值 $1,请检查', isJson: '请检查 Json 格式。', isLength: '请输入长度为 $1 的内容', notEmptyString: '请不要全输入空白字符', equalsField: '输入的数据与 $1 值不一致', equals: '输入的数据与 $1 不一致' }; function validate(value, values, rules, messages) { var errors = []; Object.keys(rules).forEach(function (ruleName) { if (!rules[ruleName]) { return; } else if (typeof exports.validations[ruleName] !== 'function') { throw new Error('Validation `' + ruleName + '` not exists!'); } var fn = exports.validations[ruleName]; if (!fn.apply(void 0, tslib_1.__spreadArrays([values, value], (Array.isArray(rules[ruleName]) ? rules[ruleName] : [rules[ruleName]])))) { errors.push(tpl_1.filter((messages && messages[ruleName]) || exports.validateMessages[ruleName], tslib_1.__assign({}, [''].concat(rules[ruleName])))); } }); return errors; } exports.validate = validate; var splitValidations = function (str) { var i = 0; var placeholder = {}; return str .replace(/matchRegexp\d*\s*\:\s*\/.*?\/[igm]*/g, function (raw) { placeholder["__" + i] = raw; return "__" + i++; }) .split(/,(?![^{\[]*[}\]])/g) .map(function (str) { return (/^__\d+$/.test(str) ? placeholder[str] : str.trim()); }); }; function str2rules(validations) { if (typeof validations === 'string') { return validations ? splitValidations(validations).reduce(function (validations, validation) { var idx = validation.indexOf(':'); var validateMethod = validation; var args = []; if (~idx) { validateMethod = validation.substring(0, idx); args = /^matchRegexp/.test(validateMethod) ? [validation] : validation .substring(idx + 1) .split(',') .map(function (arg) { try { return JSON.parse(arg); } catch (e) { return arg; } }); } validations[validateMethod] = args.length ? args : true; return validations; }, {}) : {}; } return validations || {}; } exports.str2rules = str2rules; //# sourceMappingURL=./utils/validations.js.map