@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
JavaScript
/**
* 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