UNPKG

d2-ui

Version:
118 lines (97 loc) 3.69 kB
// 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 };