text: (function($) {
      $.fn.bootstrapValidator.i18n.uri = $.extend($.fn.bootstrapValidator.i18n.uri || {}, {
          'default': 'Please enter a valid URI'
      });
  
      $.fn.bootstrapValidator.validators.uri = {
          html5Attributes: {
              message: 'message',
              allowlocal: 'allowLocal'
          },
  
          enableByHtml5: function($field) {
              return ('url' === $field.attr('type'));
          },
  
          /**
           * Return true if the input value is a valid URL
           *
           * @param {BootstrapValidator} validator The validator plugin instance
           * @param {jQuery} $field Field element
           * @param {Object} options
           * - message: The error message
           * - allowLocal: Allow the private and local network IP. Default to false
           * @returns {Boolean}
           */
          validate: function(validator, $field, options) {
              var value = $field.val();
              if (value === '') {
                  return true;
              }
  
              // Credit to https://gist.github.com/dperini/729294
              //
              // Regular Expression for URL validation
              //
              // Author: Diego Perini
              // Updated: 2010/12/05
              //
              // the regular expression composed & commented
              // could be easily tweaked for RFC compliance,
              // it was expressly modified to fit & satisfy
              // these test for an URL shortener:
              //
              //   http://mathiasbynens.be/demo/url-regex
              //
              // Notes on possible differences from a standard/generic validation:
              //
              // - utf-8 char class take in consideration the full Unicode range
              // - TLDs are mandatory unless `allowLocal` is true
              // - protocols have been restricted to ftp, http and https only as requested
              //
              // Changes:
              //
              // - IP address dotted notation validation, range: 1.0.0.0 - 223.255.255.255
              //   first and last IP address of each class is considered invalid
              //   (since they are broadcast/network addresses)
              //
              // - Added exclusion of private, reserved and/or local networks ranges
              //   unless `allowLocal` is true
              //
              var allowLocal = options.allowLocal === true || options.allowLocal === 'true',
                  urlExp     = new RegExp(
                      "^" +
                      // protocol identifier
                      "(?:(?:https?|ftp)://)" +
                      // user:pass authentication
                      "(?:\\S+(?::\\S*)?@)?" +
                      "(?:" +
                      // IP address exclusion
                      // private & local networks
                      (allowLocal
                          ? ''
                          : ("(?!(?: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 & broadcast 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,}))" +
                      // Allow intranet sites (no TLD) if `allowLocal` is true
                      (allowLocal ? '?' : '') +
                      ")" +
                      // port number
                      "(?::\\d{2,5})?" +
                      // resource path
                      "(?:/[^\\s]*)?" +
                      "$", "i"
                  );
  
              return urlExp.test(value);
          }
      };
  }(window.jQuery));
  