wix-style-react
Version:
45 lines (38 loc) • 1.02 kB
JavaScript
/**
* RegExps.
* A URL must match #1 and then at least one of #2/#3.
* Use two levels of REs to avoid REDOS.
*/
var protocolAndDomainRE = /^(?:\w+:)?\/\/(\S+)$/;
var protocolRE = /^https?:\/\/.+$/i;
var localhostDomainRE = /^localhost[\:?\d]*(?:[^\:?\d]\S*)?$/;
var nonLocalhostDomainRE = /^[^\s\.]+\.\S{2,}$/;
/**
* Loosely validate a URL `string`.
*
* @param {String} string
* @return {Boolean}
*/
export function isUrl(string) {
if (typeof string !== 'string') {
return false;
}
var match = string.match(protocolAndDomainRE);
if (!match) {
return false;
}
var everythingAfterProtocol = match[1];
if (!everythingAfterProtocol) {
return false;
}
return localhostDomainRE.test(everythingAfterProtocol) || nonLocalhostDomainRE.test(everythingAfterProtocol);
}
/**
* Prepend `http://` to relative url.
*
* @param {String} url
* @return {String}
*/
export var prependHTTP = function prependHTTP(url) {
return url && (protocolRE.test(url) ? url : "http://".concat(url));
};