Skip to content

Commit

Permalink
Merge pull request #21 from Arkni/url
Browse files Browse the repository at this point in the history
Util: Added isURL method
  • Loading branch information
dleitee committed Oct 24, 2015
2 parents 6e4025b + c7ec7ce commit f41ddb9
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 1 deletion.
14 changes: 14 additions & 0 deletions docs/util.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,19 @@ let resultFalse = isvalid('88075290')
// resultFalse => false
```

## isURL

Checks for url

#### Usage
```es6
import {validate, util} from 'valid.js'

let isvalid = validate(util.isURL)
let result = isvalid('https://github.com')
// result => true
let resultFalse = isvalid('http://.google.com')
// resultFalse => false
```

.
2 changes: 2 additions & 0 deletions gulpfile.babel.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,12 @@ gulp.task('browserify', () => {
browserify({
entries: './src/validate.js',
transform: [babelify, es6ify, deglobalify],

// Generate a UMD bundle for the supplied export name.
// This bundle works with other module systems and sets the name
// given as a window global if no module system is found.
standalone: 'valid.js',

// Enable source maps that allow you to debug your files
// separately.
debug: true
Expand Down
18 changes: 17 additions & 1 deletion src/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,21 @@ function isEmail(email) {
return string.regex(sValidEmail)(email)
}

/**
* Check for URL
*
* Copyright (c) 2010-2013 Diego Perini (http://www.iport.it), MIT licensed
* https://gist.github.com/dperini/729294
* see also https://mathiasbynens.be/demo/url-regex
*
* @params url
* @return boolean
*/
function isURL(url) {
const regex = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?: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})(?:[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]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/i
return string.regex(regex)(url)
}

/*
* Checks for cep
* @params cep
Expand All @@ -71,5 +86,6 @@ function isCep(cep) {
export const util = {
isRequired: isRequired,
isEmail: isEmail,
isCep: isCep
isCep: isCep,
isURL: isURL
}
95 changes: 95 additions & 0 deletions test/util.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -167,4 +167,99 @@ describe('Functions Util', () => {
expect(result('9999-999')).to.not.be.ok()
})
})

describe('#isURL(value)', () => {
it('should match', () => {
let result = validate(util.isURL)
let fixtures = [
'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://a.b-c.de',
'http://www.foo.bar./',
'http://223.255.255.254'
]

fixtures.forEach(el => {
expect(result(el)).to.be.ok()
})
})

it('should not match', () => {
let result = validate(util.isURL)
let fixtures = [
'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.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://3628126748',
'http://.www.foo.bar/',
'http://.www.foo.bar./',
'http://10.1.1.1'
]

fixtures.forEach(el => {
expect(result(el)).to.not.be.ok()
})
})
})
})

0 comments on commit f41ddb9

Please sign in to comment.