FAST
If you only need to test for http://
or https://
then the most efficient way is:
if (urlString.indexOf('http://') === 0 || urlString.indexOf('https://') === 0)
UNIVERSAL
However, I would suggest a more universal, non case-sensitive, protocol-agnostic approach:
var r = new RegExp('^(?:[a-z]+:)?//', 'i');
r.test('http://example.com'); // true - regular http absolute URL
r.test('HTTP://EXAMPLE.COM'); // true - HTTP upper-case absolute URL
r.test('https://www.exmaple.com'); // true - secure http absolute URL
r.test('ftp://example.com/file.txt'); // true - file transfer absolute URL
r.test('//cdn.example.com/lib.js'); // true - protocol-relative absolute URL
r.test('/myfolder/test.txt'); // false - relative URL
r.test('test'); // false - also relative URL
Explain the RegExp
^(?:[a-z]+:)?//
^
- beginning of the string
(?:
- beginning of a non-captured group
[a-z]+
- any character of 'a' to 'z' 1 or more times
:
- string (colon character)
)?
- end of the non-captured group. Group appearing 0 or 1 times
//
- string (two forward slash characters)
'i'
- non case-sensitive flag
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…