Skip to content

Commit cc02e72

Browse files
committed
netteForms: updated regexp for URL and email validation [Closes nette/nette#1539]
1 parent de42d6a commit cc02e72

File tree

3 files changed

+51
-3
lines changed

3 files changed

+51
-3
lines changed

src/assets/netteForms.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,14 +327,14 @@ Nette.validators = {
327327
},
328328

329329
email: function(elem, arg, val) {
330-
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);
330+
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);
331331
},
332332

333333
url: function(elem, arg, val, value) {
334334
if (!(/^[a-z\d+.-]+:/).test(val)) {
335335
val = 'http://' + val;
336336
}
337-
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)) {
337+
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)) {
338338
value.value = val;
339339
return true;
340340
}

tests/netteForms/spec/Nette.validateRuleSpec.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
describe('Nette.getValue & validateRule', function() {
2-
fixtures.path = 'spec/fixtures';
32

43
beforeEach(function() {
54
fixtures.cleanUp();
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
describe('Nette.validators', function() {
2+
3+
it('email', function() {
4+
expect(Nette.validators.email(null, null, '')).toBe(false);
5+
expect(Nette.validators.email(null, null, 'hello')).toBe(false);
6+
expect(Nette.validators.email(null, null, '[email protected]')).toBe(true);
7+
expect(Nette.validators.email(null, null, 'hello@localhost')).toBe(false);
8+
expect(Nette.validators.email(null, null, '[email protected]')).toBe(false);
9+
expect(Nette.validators.email(null, null, '[email protected]')).toBe(false);
10+
expect(Nette.validators.email(null, null, '[email protected]')).toBe(false);
11+
expect(Nette.validators.email(null, null, '[email protected]')).toBe(true);
12+
expect(Nette.validators.email(null, null, '[email protected]')).toBe(true);
13+
expect(Nette.validators.email(null, null, 'jean.franç[email protected]')).toBe(false);
14+
expect(Nette.validators.email(null, null, 'jerzy@kosiński.pl')).toBe(true);
15+
expect(Nette.validators.email(null, null, 'péter@esterházy.hu')).toBe(false);
16+
expect(Nette.validators.email(null, null, '[email protected]')).toBe(true);
17+
expect(Nette.validators.email(null, null, '[email protected]')).toBe(true);
18+
});
19+
20+
21+
it('url', function() {
22+
var v = {value: null};
23+
expect(Nette.validators.url(null, null, '', v)).toBe(false);
24+
expect(Nette.validators.url(null, null, 'hello', v)).toBe(true);
25+
expect(v.value === 'http://hello').toBe(true);
26+
expect(Nette.validators.url(null, null, 'nette.org', v)).toBe(true);
27+
expect(v.value === 'http://nette.org').toBe(true);
28+
expect(Nette.validators.url(null, null, 'http://nette.org0', v)).toBe(false);
29+
expect(Nette.validators.url(null, null, 'http://nette.0org', v)).toBe(false);
30+
expect(Nette.validators.url(null, null, 'http://_nette.org', v)).toBe(false);
31+
expect(Nette.validators.url(null, null, 'http://www._nette.org', v)).toBe(false);
32+
expect(Nette.validators.url(null, null, 'http://www.ne_tte.org', v)).toBe(false);
33+
expect(Nette.validators.url(null, null, 'http://1.org', v)).toBe(true);
34+
expect(Nette.validators.url(null, null, 'http://l.org', v)).toBe(true);
35+
expect(Nette.validators.url(null, null, 'http://localhost', v)).toBe(true);
36+
expect(Nette.validators.url(null, null, 'http://127.0.0.1', v)).toBe(true);
37+
expect(Nette.validators.url(null, null, 'http://[::1]', v)).toBe(true);
38+
expect(Nette.validators.url(null, null, 'http://[2001:0db8:0000:0000:0000:0000:1428:57AB]', v)).toBe(true);
39+
expect(Nette.validators.url(null, null, 'http://nette.org/path', v)).toBe(true);
40+
expect(Nette.validators.url(null, null, 'http://nette.org:8080/path', v)).toBe(true);
41+
expect(Nette.validators.url(null, null, 'https://www.nette.org/path', v)).toBe(true);
42+
expect(Nette.validators.url(null, null, 'https://example.c0m', v)).toBe(true);
43+
expect(Nette.validators.url(null, null, 'https://example.l', v)).toBe(true);
44+
expect(Nette.validators.url(null, null, 'http://one_two.example.com', v)).toBe(true);
45+
expect(Nette.validators.url(null, null, 'http://_.example.com', v)).toBe(true);
46+
expect(Nette.validators.url(null, null, 'http://_e_.example.com', v)).toBe(true);
47+
});
48+
49+
});

0 commit comments

Comments
 (0)