1 /**
2 * 用于表单验证
3 * 支持的标签:
4 * empty 值为空的时候,提示文字,并使当前表单元素获得焦点
5 * equal 值必须等于某个数值
6 * noequal 值必须不等于某个数值
7 * equalo 值不惜等于某个对象的值
8 * ctype 检查值的类型,支持email、tel、english、mobile、nickname几种格式
9 */
10
11 /**
12 * 去除字符串两边的空格
13 */
14 function trim(str) {
15 return str.replace(/(^\s*)|(\s*$)/g, "");
16 }
17 function ltrim(str) {
18 return str.replace(/(^\s*)/g, "");
19 }
20 function rtrim(str) {
21 return str.replace(/(\s*$)/g, "");
22 }
23 function isMobile(mobile) {
24 return (/^(?:13\d|15\d|18\d)-?\d{5}(\d{3}|\*{3})$/).test(trim(mobile));
25 }
26 function isEmail(strValue) {
27 return (/^[\w-\.]+@[\w-]+(\.(\w)+)*(\.(\w){2,4})$/).test(trim(strValue));
28 }
29 function isPhone(strValue) {
30 return (/^\d{3}-?\d{8}|\d{4}-?\d{7}$/).test(trim(strValue));
31 }
32 function isTel(str) {
33 var reg = /^\d{7,8}$/;
34 var patt = new RegExp(reg);
35 return patt.test(str);
36 }
37 /**
38 * 获取单选框的值
39 * @param radioName
40 * @return
41 */
42 function getRadioValue(radioName) {
43 var obj = document.getElementsByName(radioName);
44 var objLen = obj.length;
45 var i;
46 for (i = 0; i < objLen; i++) {
47 if (obj[i].checked == true) {
48 return obj[i].value;
49 }
50 }
51 return null;
52 }
53 /**
54 * 获取复选框的值
55 */
56 function getCheckboxValue(radioName) {
57 var obj = document.getElementsByName(radioName);
58 var objLen = obj.length;
59 var i;
60 var result = "";
61 for (i = 0; i < objLen; i++) {
62 if (obj[i].checked == true) {
63 result += obj[i].value + ",";
64 }
65 }
66 return result;
67 }
68 /**
69 * 复选框 是否处于 选中状态
70 */
71 function CheckboxToChecked(eleName, cValue) {
72 var obj = document.getElementsByName(eleName);
73 var objLen = obj.length;
74 var i;
75 var result = "";
76 for (i = 0; i < objLen; i++) {
77 if (obj[i].value == cValue) {
78 obj[i].checked = true;
79 } else {
80 obj[i].checked = false;
81 }
82 }
83 return result;
84 }
85 // checkBox至少选中一项
86 function chkCheckBoxChs(objNam, txt) {
87 var obj = document.getElementsByName(objNam);
88 var objLen = obj.length;
89 var num = 0;
90 for (i = 0; i < objLen; i++) {
91 if (obj[i].checked == true) {
92 num++;
93 }
94 }
95 if (num == 0) {
96 alert(txt);
97 return false;
98 }
99 return true;
100 }
101 function isEnglish(strValue) {
102 var reg = /^[A-Za-z0-9]*$/gi;
103 return reg.test(trim(strValue));
104 }
105 function isNickname(strValue) {
106 var reg = /^[a-z-_\u4e00-\u9fa5]*$/gi;
107 return reg.test(trim(strValue));
108 }
109 function ispassword(strValue) {
110 var reg = strValue.length;
111 if (reg >= 6 && reg <= 12) {
112 return true;
113 } else {
114 return false;
115 }
116 }
117 function isarea(strValue) {
118 var reg = /^0\d{2,3}$/;
119 var patt = new RegExp(reg);
120 return patt.test(strValue);
121 }
122 //自定义过滤器
123 var custom_filter = new Array;
124 function checkform(event, oform) {
125 event = event ? event: window.event;
126 if (oform == undefined || oform == null) var oform = event.srcElement ? event.srcElement: event.target;
127 var elms = oform.elements;
128 var qs;
129 var attr;
130 var other_obj;
131 var value;
132 for (var i = 0; i < elms.length; i++) {
133 // 为空的情况 -empty
134 if (elms[i].getAttribute('empty') && elms[i].value == '') {
135 elms[i].focus();
136 alert(elms[i].getAttribute('empty'));
137 return false;
138 }
139 // 检查数值相等的情况 -equal
140 if (elms[i].getAttribute('equal')) {
141 attr = elms[i].getAttribute('equal');
142 qs = attr.split('|');
143 if (elms[i].value != qs[0]) {
144 elms[i].focus();
145 alert(qs[1]);
146 return false;
147 }
148 }
149 // 检查数值不相等的情况 -noequal
150 if (elms[i].getAttribute('noequal')) {
151 attr = elms[i].getAttribute('noequal');
152 qs = attr.split('|');
153 if (elms[i].value == qs[0]) {
154 elms[i].focus();
155 alert(qs[1]);
156 return false;
157 }
158 }
159 // 检查对象相等的情况 -equalo
160 if (elms[i].getAttribute('equalo')) {
161 attr = elms[i].getAttribute('equalo');
162 qs = attr.split('|');
163 other_obj = document.getElementById(qs[0]);
164 if (elms[i].value != other_obj.value) {
165 elms[i].focus();
166 alert(qs[1]);
167 return false;
168 }
169 }
170 // 检查值的类型 -ctype
171 if (elms[i].getAttribute('ctype')) {
172 attr = elms[i].getAttribute('ctype');
173 qs = attr.split('|');
174 if (qs[0] == 'email' && !isEmail(elms[i].value)) {
175 elms[i].focus();
176 alert(qs[1]);
177 return false;
178 } else if (qs[0] == 'Tel' && !isTel(elms[i].value)) {
179 elms[i].focus();
180 alert(qs[1]);
181 return false;
182 } else if (qs[0] == 'nickname' && !isNickname(elms[i].value)) {
183 elms[i].focus();
184 alert(qs[1]);
185 return false;
186 } else if (qs[0] == 'password' && !ispassword(elms[i].value)) {
187 elms[i].focus();
188 alert(qs[1]);
189 return false;
190 } else if (qs[0] == 'area' && !isarea(elms[i].value)) {
191 elms[i].focus();
192 alert(qs[1]);
193 return false;
194 }
195 }
196 for (var j = 0; j < custom_filter.length; j++) {
197 if (elms[i].id == custom_filter[j].name || elms[i].name == custom_filter[j].name) {
198 if (custom_filter[j].callback(elms[i]) == false) {
199 elms[i].focus();
200 alert(custom_filter[j].msg);
201 return false;
202 }
203 }
204 }
205 }
206 return true;
207 }
208 /**
209 * 增加自定义过滤条件
210 * @return
211 */
212 function add_filter(name, msg, callback) {
213 custom_filter.push({
214 'name': name,
215 'msg': msg,
216 'callback': callback
217 });
218 }
219 /**
220 * 验证表单
221 * @param id
222 * @return
223 */
224 function validator(id) {
225 if (id == null) return false;
226 var oform = document.getElementById(id);
227 oform.onsubmit = checkform;
228 }
229 /**
230 * 强制验证表单,用于非提交的处理,执行此函数时,即检查表单合格性
231 * @param id
232 * @return
233 */
234 function validator_force(id) {
235 var oform = document.getElementById(id);
236 return checkform(null, oform);
237 }