Navigation Menu

Skip to content

Commit

Permalink
netteForms: updated regexp for URL and email validation [Closes nette…
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Sep 17, 2015
1 parent e4e3777 commit 3147679
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 3 deletions.
4 changes: 2 additions & 2 deletions src/assets/netteForms.js
Expand Up @@ -323,14 +323,14 @@ Nette.validators = {
},

email: function(elem, arg, val) {
return (/^("([ !\x23-\x5B\x5D-\x7E]*|\\[ -~])+"|[-a-z0-9!#$%&'*+\/=?^_`{|}~]+(\.[-a-z0-9!#$%&'*+\/=?^_`{|}~]+)*)@([0-9a-z\u00C0-\u02FF\u0370-\u1EFF]([-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,61}[0-9a-z\u00C0-\u02FF\u0370-\u1EFF])?\.)+[a-z\u00C0-\u02FF\u0370-\u1EFF][-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,17}[a-z\u00C0-\u02FF\u0370-\u1EFF]$/i).test(val);
return (/^("([ !#-[\]-~]*|\\[ -~])+"|[-a-z0-9!#$%&'*+\/=?^_`{|}~]+(\.[-a-z0-9!#$%&'*+\/=?^_`{|}~]+)*)@([0-9a-z\u00C0-\u02FF\u0370-\u1EFF]([-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,61}[0-9a-z\u00C0-\u02FF\u0370-\u1EFF])?\.)+[a-z\u00C0-\u02FF\u0370-\u1EFF]([-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,17}[a-z\u00C0-\u02FF\u0370-\u1EFF])?$/i).test(val);
},

url: function(elem, arg, val, value) {
if (!(/^[a-z\d+.-]+:/).test(val)) {
val = 'http://' + val;
}
if ((/^https?:\/\/([0-9a-z\u00C0-\u02FF\u0370-\u1EFF](([-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,61}[0-9a-z\u00C0-\u02FF\u0370-\u1EFF])?\.)*[a-z\u00C0-\u02FF\u0370-\u1EFF][-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,17}[a-z\u00C0-\u02FF\u0370-\u1EFF]|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\[[0-9a-f:]{3,39}\])(:\d{1,5})?(\/\S*)?$/i).test(val)) {
if ((/^https?:\/\/((([-_0-9a-z\u00C0-\u02FF\u0370-\u1EFF]+\.)*[0-9a-z\u00C0-\u02FF\u0370-\u1EFF]([-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,61}[0-9a-z\u00C0-\u02FF\u0370-\u1EFF])?\.)?[a-z\u00C0-\u02FF\u0370-\u1EFF]([-0-9a-z\u00C0-\u02FF\u0370-\u1EFF]{0,17}[a-z\u00C0-\u02FF\u0370-\u1EFF])?|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\[[0-9a-f:]{3,39}\])(:\d{1,5})?(\/\S*)?$/i).test(val)) {
value.value = val;
return true;
}
Expand Down
1 change: 0 additions & 1 deletion tests/netteForms/spec/Nette.validateRuleSpec.js
@@ -1,5 +1,4 @@
describe('Nette.getValue & validateRule', function() {
fixtures.path = 'spec/fixtures';

beforeEach(function() {
fixtures.cleanUp();
Expand Down
49 changes: 49 additions & 0 deletions tests/netteForms/spec/Nette.validatorsSpec.js
@@ -0,0 +1,49 @@
describe('Nette.validators', function() {

it('email', function() {
expect(Nette.validators.email(null, null, '')).toBe(false);
expect(Nette.validators.email(null, null, 'hello')).toBe(false);
expect(Nette.validators.email(null, null, 'hello@world.cz')).toBe(true);
expect(Nette.validators.email(null, null, 'hello@localhost')).toBe(false);
expect(Nette.validators.email(null, null, 'hello@127.0.0.1')).toBe(false);
expect(Nette.validators.email(null, null, 'hello@localhost.a0')).toBe(false);
expect(Nette.validators.email(null, null, 'hello@localhost.0a')).toBe(false);
expect(Nette.validators.email(null, null, 'hello@l.org')).toBe(true);
expect(Nette.validators.email(null, null, 'hello@1.org')).toBe(true);
expect(Nette.validators.email(null, null, 'jean.françois@lyotard.fr')).toBe(false);
expect(Nette.validators.email(null, null, 'jerzy@kosiński.pl')).toBe(true);
expect(Nette.validators.email(null, null, 'péter@esterházy.hu')).toBe(false);
expect(Nette.validators.email(null, null, 'hello@1.c0m')).toBe(true);
expect(Nette.validators.email(null, null, 'hello@1.c')).toBe(true);
});


it('url', function() {
var v = {value: null};
expect(Nette.validators.url(null, null, '', v)).toBe(false);
expect(Nette.validators.url(null, null, 'hello', v)).toBe(true);
expect(v.value === 'http://hello').toBe(true);
expect(Nette.validators.url(null, null, 'nette.org', v)).toBe(true);
expect(v.value === 'http://nette.org').toBe(true);
expect(Nette.validators.url(null, null, 'http://nette.org0', v)).toBe(false);
expect(Nette.validators.url(null, null, 'http://nette.0org', v)).toBe(false);
expect(Nette.validators.url(null, null, 'http://_nette.org', v)).toBe(false);
expect(Nette.validators.url(null, null, 'http://www._nette.org', v)).toBe(false);
expect(Nette.validators.url(null, null, 'http://www.ne_tte.org', v)).toBe(false);
expect(Nette.validators.url(null, null, 'http://1.org', v)).toBe(true);
expect(Nette.validators.url(null, null, 'http://l.org', v)).toBe(true);
expect(Nette.validators.url(null, null, 'http://localhost', v)).toBe(true);
expect(Nette.validators.url(null, null, 'http://127.0.0.1', v)).toBe(true);
expect(Nette.validators.url(null, null, 'http://[::1]', v)).toBe(true);
expect(Nette.validators.url(null, null, 'http://[2001:0db8:0000:0000:0000:0000:1428:57AB]', v)).toBe(true);
expect(Nette.validators.url(null, null, 'http://nette.org/path', v)).toBe(true);
expect(Nette.validators.url(null, null, 'http://nette.org:8080/path', v)).toBe(true);
expect(Nette.validators.url(null, null, 'https://www.nette.org/path', v)).toBe(true);
expect(Nette.validators.url(null, null, 'https://example.c0m', v)).toBe(true);
expect(Nette.validators.url(null, null, 'https://example.l', v)).toBe(true);
expect(Nette.validators.url(null, null, 'http://one_two.example.com', v)).toBe(true);
expect(Nette.validators.url(null, null, 'http://_.example.com', v)).toBe(true);
expect(Nette.validators.url(null, null, 'http://_e_.example.com', v)).toBe(true);
});

});

0 comments on commit 3147679

Please sign in to comment.