function isURI( value ) {
	var authority;
	var scheme;
	var parts;
	var path;

	if ( !isString( value ) ) {
		return false;
	}
	// Check for illegal characters:
	if ( RE_ILLEGALS.test( value ) ) {
		return false;
	}
	// Check for incomplete HEX escapes:
	if (
		RE_HEX1.test( value ) ||
		RE_HEX2.test( value )
	) {
		return false;
	}
	// Split the string into various URI components:
	parts = value.match( RE_URI );
	scheme = parts[ 1 ];
	authority = parts[ 2 ];
	path = parts[ 3 ];

	// Scheme is required and must be valid:
	if (
		!scheme ||
		!scheme.length ||
		!RE_SCHEME.test( scheme.toLowerCase() )
	) {
		return false;
	}
	// If authority is not present, path must not begin with `//`:
	if (
		!authority &&
		RE_PATH.test( path )
	) {
		return false;
	}
	return true;
}
Tests if a value is a URI.

@param {*} value - value to test
@returns {boolean} boolean indicating if a value is a URI

@example
var bool = isURI( 'http://google.com' );
// returns true

@example
var bool = isURI( 'http://localhost/' );
// returns true

@example
var bool = isURI( 'http://example.w3.org/path%20with%20spaces.html' );
// returns true

@example
var bool = isURI( 'http://example.w3.org/%20' );
// returns true

@example
var bool = isURI( 'ftp://ftp.is.co.za/rfc/rfc1808.txt' );
// returns true

@example
var bool = isURI( 'ftp://ftp.is.co.za/../../../rfc/rfc1808.txt' );
// returns true

@example
var bool = isURI( 'http://www.ietf.org/rfc/rfc2396.txt' );
// returns true

@example
var bool = isURI( 'ldap://[2001:db8::7]/c=GB?objectClass?one' );
// returns true

@example
var bool = isURI( 'mailto:John.Doe@example.com' );
// returns true

@example
var bool = isURI( 'news:comp.infosystems.www.servers.unix' );
// returns true

@example
var bool = isURI( 'tel:+1-816-555-1212' );
// returns true

@example
var bool = isURI( 'telnet://192.0.2.16:80/' );
// returns true

@example
var bool = isURI( 'urn:oasis:names:specification:docbook:dtd:xml:4.1.2' );
// returns true

@example
// No scheme:
var bool = isURI( '' );
// returns false

@example
// No scheme:
var bool = isURI( 'foo' );
// returns false

@example
// No scheme:
var bool = isURI( 'foo@bar' );
// returns false

@example
// No scheme:
var bool = isURI( '://foo/' );
// returns false

@example
// Illegal characters:
var bool = isURI( 'http://<foo>' );
// returns false

@example
// Invalid path:
var bool = isURI( 'http:////foo.html' );
// returns false

@example
// Incomplete hex escapes...
var bool = isURI( 'http://example.w3.org/%a' );
// returns false

@example
var bool = isURI( 'http://example.w3.org/%a/foo' );
// returns false

@example
var bool = isURI( 'http://example.w3.org/%at' );
// returns false