react-formulize
Version:
A simple form validation library for React.js which wires up custom, controlled inputs through a declarative API.
99 lines (85 loc) • 3.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
exports.email = email;
exports.length = length;
exports.required = required;
exports.match = match;
exports.alpha = alpha;
exports.numeric = numeric;
exports.max = max;
exports.min = min;
exports.custom = custom;
function email() {
var emailRegex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /^(([^<>()[\]\\.,;:\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 function (value) {
if (typeof emailRegex === 'function') {
return emailRegex(value);
}
var emailPassesRegex = emailRegex.test(value);
if (!value) return false;
return emailPassesRegex;
};
}
function length(_ref) {
var _ref2 = _slicedToArray(_ref, 2),
minValue = _ref2[0],
maxValue = _ref2[1];
/**
* `Length` Validator
* @param {[String]} value [Input value for 'text' and 'number' inputs]
* @return {[boolean]} [Returns whether the input value is acceptable (true) or not (false)]
*/
return function (value) {
if (typeof value !== 'string') return false;
if (minValue && !maxValue) return value.length <= minValue;
if (minValue && value.length < minValue) return false;
if (maxValue && value.length > maxValue) return false;
return true;
};
}
function required() {
/**
* `Required` Validator
* @param {[String, Number]} value [Input value for 'text' and 'number' inputs]
* @return {[boolean]} [Returns whether the input value is acceptable (true) or not (false)]
*/
return function (value) {
return typeof value === 'string' && !!value || typeof value === 'number';
};
}
function match(valueToMatch) {
var matchingValue = valueToMatch;
return function (value) {
if (typeof valueToMatch === 'function') matchingValue = valueToMatch();
return value === matchingValue;
};
}
function alpha() {
var alphaRegex = /[^a-z\s]/i;
return function (value) {
return typeof value === 'string' && !alphaRegex.test(value);
};
}
function numeric() {
return function (value) {
return typeof value === 'number' || typeof value === 'string' && (!value || !value.replace(/([-+]{0,1})[0-9]+(\.[0-9]+)?([eE]([+-]{0,1})[0-9]+)?/, ''));
};
}
function max(criteria) {
return function (value) {
return (typeof value === 'string' && value || typeof value === 'number') && Number(value) <= Number(criteria);
};
}
function min(criteria) {
return function (value) {
return +value >= +criteria;
};
}
function custom(validatingFn) {
return function (value) {
return validatingFn(value);
};
}