d2-ui
Version:
118 lines (97 loc) • 3.69 kB
JavaScript
// Taken from http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without
// const urlRegExp = /^(([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?$/i;
var urlRegExp = /^https?:\/\/[^ ]*/i;
// Don't allow spaces in url?
var relativeUrlRegExp = /[^ ]*/i;
// Taken from the HTML5 spec http://www.w3.org/TR/html5/forms.html#e-mail-state-(type=email)
var emailRegExp = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
// Atleast one digit
var oneDigit = /^(?=.*\d)/;
// Atleast one uppercase character
var oneUpperCase = /^(?=.*[A-Z])/;
export function isNull(value) {
return value === null;
}
export function isUndefined(value) {
return value === undefined;
}
export function isEmptyString(value) {
return value === '' || value !== undefined && value !== null && value.toString() === '';
}
export function isEmptyStringOrUndefined(value) {
return isUndefined(value) || isEmptyString(value);
}
isEmptyStringOrUndefined.message = 'value_should_be_empty_string_or_undefined';
export function isRequired(value) {
return Boolean(value) || value === 0 || value === false;
}
isRequired.message = 'value_required';
export function isUrl(value) {
if (isEmptyStringOrUndefined(value)) {
return true;
}
return urlRegExp.test(value);
}
isUrl.message = 'value_should_be_a_url';
// FIXME: Always returns true?
export function isRelativeUrl(value) {
if (isEmptyStringOrUndefined(value)) {
return true;
}
return relativeUrlRegExp.test(value.trim());
}
isRelativeUrl.message = 'value_should_be_a_relative_url';
export function isUrlArray(value) {
if (isEmptyStringOrUndefined(value)) {
return true;
}
return (value + '').split('\n').filter(function (v) {
return v.trim().length > 0;
}).reduce(function (prev, curr) {
return prev === true && isUrl(curr) || isEmptyString(curr.trim());
}, true);
}
isUrlArray.message = 'value_should_be_list_of_urls';
export function isEmail(value) {
if (isEmptyStringOrUndefined(value)) {
return true;
}
return emailRegExp.test(value);
}
isEmail.message = 'value_should_be_an_email';
export function isNumber(value) {
if (isNull(value)) {
return false;
}
if (isEmptyStringOrUndefined(value)) {
return true;
}
return !!(!isNaN(value) && Number(value) !== Infinity);
}
isNumber.message = 'value_should_be_a_number';
export function isPositiveNumber(value) {
if (isEmptyStringOrUndefined(value)) {
return true;
}
return isNumber(value) && Number(value) > 0;
}
isPositiveNumber.message = 'value_should_be_a_positive_number';
export function isValidPassword(value) {
if (isEmptyStringOrUndefined(value)) {
return true;
}
return oneDigit.test(value) && oneUpperCase.test(value) && value.length > 7 && value.length < 36;
}
isValidPassword.message = 'invalid_password';
export var wordToValidatorMap = new Map([['required', isRequired], ['url', isUrl], ['relative_url', isRelativeUrl], ['url_array', isUrlArray], ['number', isNumber], ['positive_number', isPositiveNumber], ['email', isEmail], ['is_valid_password', isValidPassword]]);
export default {
isRequired: isRequired,
isUrl: isUrl,
isNumber: isNumber,
isPositiveNumber: isPositiveNumber,
isEmail: isEmail,
isEmptyString: isEmptyString,
isNull: isNull,
isUndefined: isUndefined,
isValidPassword: isValidPassword
};