Skip to content

Instantly share code, notes, and snippets.

@jejacks0n
Created August 12, 2011 04:18
Show Gist options
  • Save jejacks0n/1141454 to your computer and use it in GitHub Desktop.
Save jejacks0n/1141454 to your computer and use it in GitHub Desktop.
var positive = [
'http://foo.com/blah_blah',
'http://foo.com/blah_blah/',
'http://foo.com/blah_blah_(wikipedia)',
'http://foo.com/blah_blah_(wikipedia)_(again)',
'http://www.example.com/wpstyle/?p=364',
'https://www.example.com/foo/?bar=baz&inga=42&quux',
'http://✪df.ws/123',
'http://userid:[email protected]:8080',
'http://userid:[email protected]:8080/',
'http://[email protected]',
'http://[email protected]/',
'http://[email protected]:8080',
'http://[email protected]:8080/',
'http://userid:[email protected]',
'http://userid:[email protected]/',
'http://142.42.1.1/',
'http://142.42.1.1:8080/',
'http://➡.ws/䨹',
'http://⌘.ws',
'http://⌘.ws/',
'http://foo.com/blah_(wikipedia)#cite-1',
'http://foo.com/blah_(wikipedia)_blah#cite-1',
'http://foo.com/unicode_(✪)_in_parens',
'http://foo.com/(something)?after=parens',
'http://☺.damowmow.com/',
'http://code.google.com/events/#&product=browser',
'http://j.mp',
'ftp://foo.bar/baz',
'http://foo.bar/?q=Test%20URL-encoded%20stuff',
'http://مثال.إختبار',
'http://例子.测试',
'http://उदाहरण.परीक्षा',
'http://-.~_!$&\'()*+,;=:%40:80%2f::::::@example.com',
'http://1337.net',
'http://10.1.1.1',
'http://10.1.1.254',
'http://223.255.255.254',
];
var negative = [
'http://',
'http://.',
'http://..',
'http://../',
'http://?',
'http://??',
'http://??/',
'http://#',
'http://##',
'http://##/',
'http://foo.bar?q=Spaces should be encoded',
'//',
'//a',
'///a',
'///',
'http:///a',
'foo.com',
'rdar://1234',
'h://test',
'http:// shouldfail.com',
':// should fail',
'http://foo.bar/foo(bar)baz quux',
'ftps://foo.bar/',
'http://-error-.invalid/',
'http://a.b--c.de/',
'http://-a.b.co',
'http://a.b-.co',
'http://0.0.0.0',
'http://10.1.1.0',
'http://10.1.1.255',
'http://224.1.1.1',
'http://1.1.1.1.1',
'http://123.123.123',
'http://.www.foo.bar/',
'http://www.foo.bar./',
'http://.www.foo.bar./'
]
var parts = null;
var regexp = /^((https?|ftp):\/\/)(((.+)@)?([^-\.\/\s]([^:\/\?#\s]+))(:(\d+))?)(\/?[^\?\s#]+)?(\?([^#\s]+))?(#(.*))?$/i;
// positive
console.debug('Running positive expectations...');
count = 0;
for (var i = 0; i < positive.length; i += 1) {
if (parts = positive[i].match(regexp)) count += 1;
else console.debug('FAILED: ', positive[i]);
}
console.debug(count + ' of ' + positive.length + ' passed.');
console.debug(positive.length - count + ' failed.');
// negative
console.debug('Running negative expectations...');
count = 0;
for (var i = 0; i < negative.length; i += 1) {
if (parts = negative[i].match(regexp)) {
parts = {scheme: parts[2], credentials: parts[5], host: parts[6], port: parts[9], path: parts[10], query: parts[12], hash: parts[14]};
console.debug('FAILED: ', negative[i], parts);
} else count += 1;
}
console.debug(count + ' of ' + negative.length + ' passed.');
console.debug(negative.length - count + ' failed.');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment