Skip to content

Commit 10663cb

Browse files
author
James Watts
committed
Migration from SourceForge (2010-01-24)
1 parent 4d2126b commit 10663cb

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed

nano.validate.js

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
/*
2+
* nano Validate plugin v1.0
3+
* http://nanojs.org/plugins/validate
4+
*
5+
* Copyright (c) 2008-2015 James Watts
6+
* https://github.com/jameswatts
7+
*
8+
* This is FREE software, licensed under the GPL
9+
* http://www.gnu.org/licenses/gpl.html
10+
*/
11+
12+
if (nano) {
13+
nano.plugin({
14+
validate: function _validate(type, mode, min, max) {
15+
return nano.validate(this, type, mode, min, max);
16+
}
17+
},
18+
function() {
19+
this.validate = function _validate(node, type, mode, min, max) {
20+
var value = node.get();
21+
switch (type) {
22+
case 'url':
23+
return (/^(http|ftp)(s)?:\/\/\w+(\.\w+)*(-\w+)?\.([a-z]{2,7}(\.[a-z]{2,7}|))(:\d{2,5})?(\/)?((\/).+)?$/.test(value)
24+
|| (typeof value === 'string'
25+
&& ((nano.isset(min) && value.length < min)
26+
|| (nano.isset(max) && value.length > max))));
27+
case 'email':
28+
return (/^([\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i.test(value)
29+
|| (typeof value === 'string'
30+
&& ((nano.isset(min) && value.length < min)
31+
|| (nano.isset(max) && value.length > max))));
32+
case 'date':
33+
var check = '/^([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])\/([1-9]|0[1-9]|1[1-2])\/\d{4}$/';
34+
if (typeof mode === 'string') {
35+
mode = mode.toLowerCase()
36+
.replace(/\//, '\/')
37+
.replace(/\-/, '\-')
38+
.replace(/dd/, '([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])')
39+
.replace(/mm/, '([1-9]|0[1-9]|1[1-2])');
40+
check = (mode.indexOf('yyyy') !== -1)? mode.replace(/yyyy/, '\\d{4}') : mode.replace(/yy/, '\\d{2}');
41+
}
42+
return new RegExp('^' + check + '$', 'i').test(value);
43+
case 'time':
44+
var check = '/^([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])\:([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])$/';
45+
if (typeof mode === 'string') {
46+
check = mode.toLowerCase()
47+
.replace(/\:/, '\:')
48+
.replace(/hh/, '([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])')
49+
.replace(/mm/, '([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])')
50+
.replace(/ss/, '([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])');
51+
}
52+
return new RegExp('^' + check + '$', 'i').test(value);
53+
case 'password':
54+
if (mode) {
55+
if (!nano.isset(value)
56+
|| /\s/.test(value)
57+
|| !/\d+/.test(value)
58+
|| !/[a-z]+/.test(value)
59+
|| !/[A-Z]+/.test(value)
60+
|| !/\W+/.test(value)
61+
|| value === ''
62+
|| value === '0'
63+
|| value === 0
64+
|| value === false
65+
|| (typeof value === 'string'
66+
&& ((nano.isset(min) && value.length < min)
67+
|| (nano.isset(max) && value.length > max)))) {
68+
return false;
69+
}
70+
} else if (!nano.isset(value)
71+
|| /\s/.test(value)
72+
|| !/\d+/.test(value)
73+
|| !/[a-z]+/.test(value)
74+
|| !/[A-Z]+/.test(value)
75+
|| value === ''
76+
|| value === '0'
77+
|| value === 0
78+
|| value === false
79+
|| (typeof value === 'string'
80+
&& ((nano.isset(min) && value.length < min)
81+
|| (nano.isset(max) && value.length > max)))) {
82+
return false;
83+
}
84+
return true;
85+
case 'number':
86+
return (typeof value !== 'number'
87+
|| isNaN(value)
88+
|| ((nano.isset(min) && value < min)
89+
|| (nano.isset(max) && value > max)))? false : true;
90+
case 'string':
91+
return (typeof value !== 'string'
92+
|| value === ''
93+
|| /^\s+$/.test(value)
94+
|| (nano.isset(mode)
95+
&& ((nano.type(mode) === 'regexp'
96+
&& !mode.test(value))
97+
|| (typeof mode === 'string'
98+
&& value !== mode)))
99+
|| ((nano.isset(min) && value.length < min)
100+
|| (nano.isset(max) && value.length > max)))? false : true;
101+
case 'object':
102+
return (nano.type(value) !== 'object'
103+
|| (nano.isset(mode)
104+
&& !nano.isset(value[mode]))
105+
|| ((nano.isset(min) && nano.count(value) < min)
106+
|| (nano.isset(max) && nano.count(value) > max)))? false : true;
107+
case 'array':
108+
return (nano.type(value) !== 'array'
109+
|| ((nano.isset(min) && value.length < min)
110+
|| (nano.isset(max) && value.length > max)))? false : true;
111+
default:
112+
return (!nano.isset(value)
113+
|| value === ''
114+
|| value === '0'
115+
|| value === 0
116+
|| value === false
117+
|| (typeof value === 'number'
118+
&& ((nano.isset(min) && value < min)
119+
|| (nano.isset(max) && value > max)))
120+
|| (typeof value === 'string'
121+
&& ((nano.isset(min) && value.length < min)
122+
|| (nano.isset(max) && value.length > max))))? false : true;
123+
}
124+
};
125+
});
126+
}

0 commit comments

Comments
 (0)