UNPKG

@terminus/ngx-tools

Version:

[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github

41 lines 4.42 kB
/** * Define a regex to validate a URL * * Discussion: https://gist.github.com/dperini/729294 * NOTE: This is identical to our standard URL regex with the exception that the protocol is optional. */ export const urlOptionalProtocolRegex = new RegExp('^' // protocol identifier + '(?:(?:https?|ftp)://)?' // user:pass authentication + '(?:\\S+(?::\\S*)?@)?' + '(?:' // IP address exclusion // private & local networks + '(?!(?:10|127)(?:\\.\\d{1,3}){3})' + '(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})' + '(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})' // IP address dotted notation octets // excludes loopback network 0.0.0.0 // excludes reserved space >= 224.0.0.0 // excludes network & broacast addresses // (first & last IP address of each class) + '(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])' + '(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}' + '(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))' + '|' // host name + '(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)' // domain name + '(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*' // TLD identifier + '(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))' // TLD may end with dot + '\\.?' + ')' // port number + '(?::\\d{2,5})?' // resource path + '(?:[/?#]\\S*)?' + '$', 'i'); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLW9wdGlvbmFsLXByb3RvY29sLnJlZ2V4LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRlcm1pbnVzL25neC10b29scy9yZWdleC8iLCJzb3VyY2VzIjpbInVybC1vcHRpb25hbC1wcm90b2NvbC91cmwtb3B0aW9uYWwtcHJvdG9jb2wucmVnZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLE1BQU0sQ0FDaEQsR0FBRztJQUNELHNCQUFzQjtNQUNwQix3QkFBd0I7SUFDMUIsMkJBQTJCO01BQ3pCLHNCQUFzQjtNQUN0QixLQUFLO0lBQ0wsdUJBQXVCO0lBQ3ZCLDJCQUEyQjtNQUN6QixrQ0FBa0M7TUFDbEMsK0NBQStDO01BQy9DLG9EQUFvRDtJQUN0RCxvQ0FBb0M7SUFDcEMsb0NBQW9DO0lBQ3BDLHVDQUF1QztJQUN2Qyx3Q0FBd0M7SUFDeEMsMENBQTBDO01BQ3hDLHdDQUF3QztNQUN4Qyw0Q0FBNEM7TUFDNUMsZ0RBQWdEO01BQ2xELEdBQUc7SUFDSCxZQUFZO01BQ1YsNERBQTREO0lBQzlELGNBQWM7TUFDWixnRUFBZ0U7SUFDbEUsaUJBQWlCO01BQ2YscUNBQXFDO0lBQ3ZDLHVCQUF1QjtNQUNyQixNQUFNO01BQ1IsR0FBRztJQUNMLGNBQWM7TUFDWixnQkFBZ0I7SUFDbEIsZ0JBQWdCO01BQ2QsZ0JBQWdCO01BQ2xCLEdBQUcsRUFBRSxHQUFHLENBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGVmaW5lIGEgcmVnZXggdG8gdmFsaWRhdGUgYSBVUkxcbiAqXG4gKiBEaXNjdXNzaW9uOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9kcGVyaW5pLzcyOTI5NFxuICogTk9URTogVGhpcyBpcyBpZGVudGljYWwgdG8gb3VyIHN0YW5kYXJkIFVSTCByZWdleCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgcHJvdG9jb2wgaXMgb3B0aW9uYWwuXG4gKi9cbmV4cG9ydCBjb25zdCB1cmxPcHRpb25hbFByb3RvY29sUmVnZXggPSBuZXcgUmVnRXhwKFxuICAnXidcbiAgICAvLyBwcm90b2NvbCBpZGVudGlmaWVyXG4gICAgKyAnKD86KD86aHR0cHM/fGZ0cCk6Ly8pPydcbiAgICAvLyB1c2VyOnBhc3MgYXV0aGVudGljYXRpb25cbiAgICArICcoPzpcXFxcUysoPzo6XFxcXFMqKT9AKT8nXG4gICAgKyAnKD86J1xuICAgICAgLy8gSVAgYWRkcmVzcyBleGNsdXNpb25cbiAgICAgIC8vIHByaXZhdGUgJiBsb2NhbCBuZXR3b3Jrc1xuICAgICAgKyAnKD8hKD86MTB8MTI3KSg/OlxcXFwuXFxcXGR7MSwzfSl7M30pJ1xuICAgICAgKyAnKD8hKD86MTY5XFxcXC4yNTR8MTkyXFxcXC4xNjgpKD86XFxcXC5cXFxcZHsxLDN9KXsyfSknXG4gICAgICArICcoPyExNzJcXFxcLig/OjFbNi05XXwyXFxcXGR8M1swLTFdKSg/OlxcXFwuXFxcXGR7MSwzfSl7Mn0pJ1xuICAgICAgLy8gSVAgYWRkcmVzcyBkb3R0ZWQgbm90YXRpb24gb2N0ZXRzXG4gICAgICAvLyBleGNsdWRlcyBsb29wYmFjayBuZXR3b3JrIDAuMC4wLjBcbiAgICAgIC8vIGV4Y2x1ZGVzIHJlc2VydmVkIHNwYWNlID49IDIyNC4wLjAuMFxuICAgICAgLy8gZXhjbHVkZXMgbmV0d29yayAmIGJyb2FjYXN0IGFkZHJlc3Nlc1xuICAgICAgLy8gKGZpcnN0ICYgbGFzdCBJUCBhZGRyZXNzIG9mIGVhY2ggY2xhc3MpXG4gICAgICArICcoPzpbMS05XVxcXFxkP3wxXFxcXGRcXFxcZHwyWzAxXVxcXFxkfDIyWzAtM10pJ1xuICAgICAgKyAnKD86XFxcXC4oPzoxP1xcXFxkezEsMn18MlswLTRdXFxcXGR8MjVbMC01XSkpezJ9J1xuICAgICAgKyAnKD86XFxcXC4oPzpbMS05XVxcXFxkP3wxXFxcXGRcXFxcZHwyWzAtNF1cXFxcZHwyNVswLTRdKSknXG4gICAgKyAnfCdcbiAgICAgIC8vIGhvc3QgbmFtZVxuICAgICAgKyAnKD86KD86W2EtelxcXFx1MDBhMS1cXFxcdWZmZmYwLTldLSopKlthLXpcXFxcdTAwYTEtXFxcXHVmZmZmMC05XSspJ1xuICAgICAgLy8gZG9tYWluIG5hbWVcbiAgICAgICsgJyg/OlxcXFwuKD86W2EtelxcXFx1MDBhMS1cXFxcdWZmZmYwLTldLSopKlthLXpcXFxcdTAwYTEtXFxcXHVmZmZmMC05XSspKidcbiAgICAgIC8vIFRMRCBpZGVudGlmaWVyXG4gICAgICArICcoPzpcXFxcLig/OlthLXpcXFxcdTAwYTEtXFxcXHVmZmZmXXsyLH0pKSdcbiAgICAgIC8vIFRMRCBtYXkgZW5kIHdpdGggZG90XG4gICAgICArICdcXFxcLj8nXG4gICAgKyAnKSdcbiAgICAvLyBwb3J0IG51bWJlclxuICAgICsgJyg/OjpcXFxcZHsyLDV9KT8nXG4gICAgLy8gcmVzb3VyY2UgcGF0aFxuICAgICsgJyg/OlsvPyNdXFxcXFMqKT8nXG4gICsgJyQnLCAnaScsXG4pO1xuIl19