发一个利用js验证网址是否正确,email格式是否正确,是否为数字及数字的范围,密码或字符长度及是否相等及要求的最小字符串长度,输入是否为空等Javascript常见验证代码合集,用的上的朋友可以拿去了自行添加整理。
关键的JavaScript代码函数:
001 | /** |
002 | * 数据验证框架.增加了对id字段检查出错时,直接在对应后面添加一< span>元素来显示错误信息. |
003 | * |
004 | * @author www.phpernote.com |
005 | * @version 1.0 |
006 | * @description 2012-05-16 |
007 | */ |
008 | var checkData= new function (){ |
009 | var idExt= "_phpernote_Span" ; //生成span层的id后缀 |
010 | /** |
011 | * 得到中英文字符长(中文为2个字符) |
012 | * |
013 | * @param {} |
014 | * str |
015 | * @return 字符长 |
016 | */ |
017 | this .length= function (str){ |
018 | var p1= new RegExp( '%u..' , 'g' ); |
019 | var p2= new RegExp( '%.' , 'g' ); |
020 | return escape(str).replace(p1, '' ).replace(p2, '' ).length; |
021 | } |
022 | /** |
023 | * 删除对应id元素 |
024 | */ |
025 | this .remove= function (id){ |
026 | var idObject=document.getElementById(id); |
027 | if (idObject != null ) |
028 | idObject.parentNode.removeChild(idObject); |
029 | } |
030 | /** |
031 | * 在对应id后面错误信息 |
032 | * |
033 | * @param id:需要显示错误信息的id元素 |
034 | * str:显示错误信息 |
035 | */ |
036 | this .appendError= function (id, str){ |
037 | this .remove(id + idExt); // 如果span元素存在,则先删除此元素 |
038 | var spanNew=document.createElement( "span" ); // 创建span |
039 | spanNew.id=id + idExt; // 生成spanid |
040 | spanNew.style.color= "red" ; |
041 | spanNew.appendChild(document.createTextNode(str)); // 给span添加内容 |
042 | var inputId=document.getElementById(id); |
043 | inputId.parentNode.insertBefore(spanNew, inputId.nextSibling); // 给需要添加元素后面添加span |
044 | } |
045 | /** |
046 | * @description 过滤所有空格字符。 |
047 | * @param str:需要去掉空间的原始字符串 |
048 | * @return 返回已经去掉空格的字符串 |
049 | */ |
050 | this .trimSpace= function (str){ |
051 | str+= '' ; |
052 | while ((str.charAt(0) == ' ' ) || (str.charAt(0) == '???' ) || (escape(str.charAt(0)) == '%u3000' )) |
053 | str=str.substring(1, str.length); |
054 | while ((str.charAt(str.length - 1) == ' ' ) || (str.charAt(str.length - 1) == '???' ) || (escape(str.charAt(str.length - 1)) == '%u3000' )) |
055 | str=str.substring(0, str.length - 1); |
056 | return str; |
057 | } |
058 | /** |
059 | * 过滤字符串开始部分的空格\字符串结束部分的空格\将文字中间多个相连的空格变为一个空格 |
060 | * |
061 | * @param {Object} |
062 | * inputString |
063 | */ |
064 | this .trim= function (inputString){ |
065 | if ( typeof inputString != "string" ){ |
066 | return inputString; |
067 | } |
068 | var retValue=inputString; |
069 | var ch=retValue.substring(0, 1); |
070 | while (ch == " " ){ |
071 | // 检查字符串开始部分的空格 |
072 | retValue=retValue.substring(1, retValue.length); |
073 | ch=retValue.substring(0, 1); |
074 | } |
075 | ch=retValue.substring(retValue.length - 1, retValue.length); |
076 | while (ch == " " ){ |
077 | // 检查字符串结束部分的空格 |
078 | retValue=retValue.substring(0, retValue.length - 1); |
079 | ch=retValue.substring(retValue.length - 1, retValue.length); |
080 | } |
081 | while (retValue.indexOf( " " ) != -1){ |
082 | // 将文字中间多个相连的空格变为一个空格 |
083 | retValue=retValue.substring(0, retValue.indexOf( " " )) + retValue.substring(retValue.indexOf( " " ) + 1, retValue.length); |
084 | } |
085 | return retValue; |
086 | } |
087 | /** |
088 | * 过滤字符串,指定过滤内容,如果内容为空,则默认过滤 '~!@#$%^&*()-+." |
089 | * |
090 | * @param {Object} |
091 | * str |
092 | * @param {Object} |
093 | * filterStr |
094 | * |
095 | * @return 包含过滤内容,返回True,否则返回false; |
096 | */ |
097 | this .filterStr= function (str, filterString){ |
098 | filterString=filterString == "" ? "'~!@#$%^&*()-+.\"" : filterString; |
099 | var ch; |
100 | var i; |
101 | var temp; |
102 | var error= false ; // 当包含非法字符时,返回True |
103 | for (i=0;i <= (filterString.length - 1);i++){ |
104 | ch=filterString.charAt(i); |
105 | temp=str.indexOf(ch); |
106 | if (temp != -1){ |
107 | error= true ; |
108 | break ; |
109 | } |
110 | } |
111 | return error; |
112 | } |
113 | this .filterStrSpan= function (id, filterString){ |
114 | filterString=filterString == "" ? "'~!@#$%^&*()-+.\"" : filterString; |
115 | var val=document.getElementById(id); |
116 | if ( this .filterStr(val.value, filterString)){ |
117 | val.select(); |
118 | var str= "不能包含非法字符" + filterString; |
119 | this .appendError(id, str); |
120 | return false ; |
121 | } else { |
122 | this .remove(id + idExt); |
123 | return true ; |
124 | } |
125 | } |
126 | /** |
127 | * 检查是否为网址 |
128 | * |
129 | * @param {} |
130 | * str_url |
131 | * @return {Boolean}true:是网址,false:<b>不是</b>网址; |
132 | */ |
133 | this .isURL= function (str_url) { // 验证url |
134 | var strRegex= "^((https|http|ftp|rtsp|mms)?://)" |
135 | + "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" // ftp的user@ |
136 | + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184 |
137 | + "|" // 允许IP和DOMAIN(域名) |
138 | + "([0-9a-z_!~*'()-]+\.)*" // 域名- www. |
139 | + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名 |
140 | + "[a-z]{2,6})" // first level domain- .com or .museum |
141 | + "(:[0-9]{1,4})?" // 端口- :80 |
142 | + "((/?)|" // a slash isn't required if there is no file name |
143 | + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$" ; |
144 | var re= new RegExp(strRegex); |
145 | return re.test(str_url); |
146 | } |
147 | this .isURLSpan= function (id){ |
148 | var val=document.getElementById(id); |
149 | if (! this .isURL(val.value)){ |
150 | val.select(); |
151 | var str= "链接不符合格式;" ; |
152 | this .appendError(id, str); |
153 | return false ; |
154 | } else { |
155 | this .remove(id + idExt); |
156 | return true ; |
157 | } |
158 | } |
159 | /** |
160 | * 检查是否为电子邮件 |
161 | * |
162 | * @param {} |
163 | * str |
164 | * @return {Boolean}true:电子邮件,false:<b>不是</b>电子邮件; |
165 | */ |
166 | this .isEmail= function (str){ |
167 | var re=/^([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/; |
168 | return re.test(str); |
169 | } |
170 | this .isEmailSpan= function (id){ |
171 | var val=document.getElementById(id); |
172 | if (! this .isEmail(val.value)){ |
173 | val.select(); |
174 | var str= "邮件不符合格式;" ; |
175 | this .appendError(id, str); |
176 | return false ; |
177 | } else { |
178 | this .remove(id + idExt); |
179 | return true ; |
180 | } |
181 | } |
182 | /** |
183 | * 检查是否为数字 |
184 | * |
185 | * @param {} |
186 | * str |
187 | * @return {Boolean}true:数字,false:<b>不是</b>数字; |
188 | */ |
189 | this .isNum= function (str){ |
190 | var re=/^[\d]+$/; |
191 | return re.test(str); |
192 | } |
193 | this .isNumSpan= function (id){ |
194 | var val=document.getElementById(id); |
195 | if (! this .isNum(val.value)){ |
196 | val.select(); |
197 | var str= "必须是数字;" ; |
198 | this .appendError(id, str); |
199 | return false ; |
200 | } else { |
201 | this .remove(id + idExt); |
202 | return true ; |
203 | } |
204 | } |
205 | /** |
206 | * 检查数值是否在给定范围以内,为空,不做检查<br> |
207 | * |
208 | * @param {} |
209 | * str_num |
210 | * @param {} |
211 | * small 应该大于或者等于的数值(此值为空时,只检查不能大于最大值) |
212 | * @param {} |
213 | * big 应该小于或者等于的数值(此值为空时,只检查不能小于最小值) |
214 | * |
215 | * @return {Boolean}<b>小于最小数值或者大于最大数值</b>数字返回false 否则返回true; |
216 | */ |
217 | this .isRangeNum= function (str_num, small, big){ |
218 | if (! this .isNum(str_num)) // 检查是否为数字 |
219 | return false ; |
220 | if (small == "" && big == "" ) |
221 | throw str_num + "没有定义最大,最小值数字!" ; |
222 | if (small != "" ){ |
223 | if (str_num < small) |
224 | return false ; |
225 | } |
226 | if (big != "" ){ |
227 | if (str_num > big) |
228 | return false ; |
229 | } |
230 | return true ; |
231 | } |
232 | this .isRangeNumSpan= function (id, small, big){ |
233 | var val=document.getElementById(id); |
234 | if (! this .isRangeNum(val.value, small, big)){ |
235 | val.select(); |
236 | var str= "" ; |
237 | if (small != "" ){ |
238 | str= "应该大于或者等于 " + small; |
239 | } |
240 | if (big != "" ){ |
241 | str+= " 应该小于或者等于 " + big; |
242 | } |
243 | this .appendError(id, str); |
244 | return false ; |
245 | } else { |
246 | this .remove(id + idExt); |
247 | return true ; |
248 | } |
249 | } |
250 | /** |
251 | * 检查是否为合格字符串(不区分大小写)<br> |
252 | * 是由a-z0-9_组成的字符串 |
253 | * |
254 | * @param {} |
255 | * str 检查的字符串 |
256 | * @param {} |
257 | * idStr 光标定位的字段ID<b>只能接收ID</b> |
258 | * @return {Boolean}<b>不是</b>"a-z0-9_"组成返回false,否则返回true; |
259 | */ |
260 | this .isLicit= function (str){ |
261 | var re=/^[_0-9a-zA-Z]*$/; |
262 | return re.test(str); |
263 | } |
264 | this .isLicitSpan= function (id){ |
265 | var val=document.getElementById(id); |
266 | if (! this .isLicit(val.value)){ |
267 | val.select(); |
268 | var str= "是由a-z0-9_组成的字符串(不区分大小写);" ; |
269 | this .appendError(id, str); |
270 | return false ; |
271 | } else { |
272 | this .remove(id + idExt); |
273 | return true ; |
274 | } |
275 | } |
276 | /** |
277 | * 检查二个字符串是否相等 |
278 | * |
279 | * @param {} |
280 | * str1 第一个字符串 |
281 | * @param {} |
282 | * str2 第二个字符串 |
283 | * @return {Boolean}字符串不相等返回false,否则返回true; |
284 | */ |
285 | this .isEquals= function (str1, str2){ |
286 | return str1 == str2; |
287 | } |
288 | this .isEqualsSpan= function (id, id1){ |
289 | var val=document.getElementById(id); |
290 | var val1=document.getElementById(id1); |
291 | if (! this .isEquals(val.value, val1.value)){ |
292 | val.select(); |
293 | var str= "二次输入内容必须一样;" ; |
294 | this .appendError(id, str); |
295 | return false ; |
296 | } else { |
297 | this .remove(id + idExt); |
298 | return true ; |
299 | } |
300 | } |
301 | /** |
302 | * 检查字符串是否在给定长度范围以内(中文字符以2个字节计算),字符为空,不做检查<br> |
303 | * |
304 | * @param {} |
305 | * str 检查的字符 |
306 | * @param {} |
307 | * lessLen 应该大于或者等于的长度 |
308 | * @param {} |
309 | * moreLen 应该小于或者等于的长度 |
310 | * |
311 | * @return {Boolean}<b>小于最小长度或者大于最大长度</b>数字返回false; |
312 | */ |
313 | this .isRange= function (str, lessLen, moreLen){ |
314 | var strLen= this .length(str); |
315 | if (lessLen != "" ){ |
316 | if (strLen < lessLen) |
317 | return false ; |
318 | } |
319 | if (moreLen != "" ){ |
320 | if (strLen > moreLen) |
321 | return false ; |
322 | } |
323 | if (lessLen == "" && moreLen == "" ) |
324 | throw "没有定义最大最小长度!" ; |
325 | return true ; |
326 | } |
327 | this .isRangeSpan= function (id, lessLen, moreLen){ |
328 | var val=document.getElementById(id); |
329 | if (! this .isRange(val.value, lessLen, moreLen)){ |
330 | var str= "长度" ; |
331 | if (lessLen != "" ) |
332 | str+= "大于或者等于 " + lessLen + ";" ; |
333 | if (moreLen != "" ) |
334 | str+= " 应该小于或者等于 " + moreLen; |
335 | val.select(); |
336 | this .appendError(id, str); |
337 | return false ; |
338 | } else { |
339 | this .remove(id + idExt); |
340 | return true ; |
341 | } |
342 | } |
343 | /** |
344 | * 检查字符串是否小于给定长度范围(中文字符以2个字节计算)<br> |
345 | * |
346 | * @param {} |
347 | * str 字符串 |
348 | * @param {} |
349 | * lessLen 小于或等于长度 |
350 | * |
351 | * @return {Boolean}<b>小于给定长度</b>数字返回false; |
352 | */ |
353 | this .isLess= function (str, lessLen){ |
354 | return this .isRange(str, lessLen, "" ); |
355 | } |
356 | this .isLessSpan= function (id, lessLen){ |
357 | var val=document.getElementById(id); |
358 | if (! this .isLess(val.value, lessLen)){ |
359 | var str= "长度大于或者等于 " + lessLen; |
360 | val.select(); |
361 | this .appendError(id, str); |
362 | return false ; |
363 | } else { |
364 | this .remove(id + idExt); |
365 | return true ; |
366 | } |
367 | } |
368 | /** |
369 | * 检查字符串是否大于给定长度范围(中文字符以2个字节计算)<br> |
370 | * |
371 | * @param {} |
372 | * str 字符串 |
373 | * @param {} |
374 | * moreLen 小于或等于长度 |
375 | * |
376 | * @return {Boolean}<b>大于给定长度</b>数字返回false; |
377 | */ |
378 | this .isMore= function (str, moreLen){ |
379 | return this .isRange(str, '' , moreLen); |
380 | } |
381 | this .isMoreSpan= function (id, moreLen){ |
382 | var val=document.getElementById(id); |
383 | if (! this .isMore(val.value, moreLen)){ |
384 | var str= "长度应该小于或者等于 " + moreLen; |
385 | val.select(); |
386 | this .appendError(id, str); |
387 | return false ; |
388 | } else { |
389 | this .remove(id + idExt); |
390 | return true ; |
391 | } |
392 | } |
393 | /** |
394 | * 检查字符不为空 |
395 | * |
396 | * @param {} |
397 | * str |
398 | * @return {Boolean}<b>字符为空</b>返回true,否则为false; |
399 | */ |
400 | this .isEmpty= function (str){ |
401 | return str == '' ; |
402 | } |
403 | this .isEmptySpan= function (id){ |
404 | var val=document.getElementById(id); |
405 | if ( this .isEmpty(val.value)){ |
406 | var str= "不允许为空;" ; |
407 | val.select(); |
408 | this .appendError(id, str); |
409 | return false ; |
410 | } else { |
411 | this .remove(id + idExt); |
412 | return true ; |
413 | } |
414 | } |
415 | } |
具体使用方法见下面案例:
01 | < html > |
02 | < head > |
03 | < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" /> |
04 | < title >js验证网址,js验证email,js验证数字,js验证密码,js验证字符长度及是否相等,js验证数字范围,js验证是否为空等Javascript验证代码合集(www.phpernote.com)</ title > |
05 | < script type = "text/javascript" src = "function.js" ></ script > |
06 | < script type = "text/javascript" > |
07 | function checkForm(){ |
08 | var isPass = true; |
09 | //过滤字符串 |
10 | if(!(checkData.isEmptySpan("filterStr") && checkData.filterStrSpan('filterStr','#$%$'))) { |
11 | isPass = false; |
12 | } |
13 | //检查url |
14 | if(!(checkData.isEmptySpan("isURL") && checkData.isURLSpan('isURL'))) |
15 | isPass = false; |
16 | //email |
17 | if(!(checkData.isEmptySpan("isEmail") && checkData.isEmailSpan('isEmail'))) |
18 | isPass = false; |
19 | //数字 |
20 | if(!(checkData.isNumSpan('isNum'))) |
21 | isPass = false; |
22 | //数字大小 |
23 | if(!(checkData.isEmptySpan("isRangeNum") && checkData.isNumSpan('isRangeNum') && checkData.isRangeNumSpan('isRangeNum',10,100))) |
24 | isPass = false; |
25 | //密码 (数字,字母,下划线) |
26 | if(!(checkData.isLicitSpan('isLicit'))) |
27 | isPass = false; |
28 | //二个字段是否相等 |
29 | if(!(checkData.isEmptySpan("isEquals") && checkData.isEqualsSpan('isEquals','isEquals1'))) |
30 | isPass = false; |
31 | //字符长度控制 |
32 | if(!(checkData.isRangeSpan('isRange',5,10))) |
33 | isPass = false; |
34 | //字符最短控制 |
35 | if(!(checkData.isLessSpan('isLess',10))) |
36 | isPass = false; |
37 | //字符最长控制 |
38 | if(!(checkData.isEmptySpan("isMore") && checkData.isMoreSpan('isMore',30))) |
39 | isPass = false; |
40 | //为空控制 |
41 | if(!(checkData.isEmptySpan("isEmpty"))) |
42 | isPass = false; |
43 | return isPass; |
44 | } |
45 | </ script > |
46 | </ head > |
47 | < body > |
48 | < form action = "index.jsp" method = "post" onsubmit = "return checkForm();" > |
49 | < table > |
50 | < tbody > |
51 | < tr > |
52 | < td >字符过滤:< input type = "text" id = "filterStr" name = "filterStr" ></ td > |
53 | < td >链接:< input type = "text" id = "isURL" name = "isURL" ></ td > |
54 | </ tr > |
55 | < tr > |
56 | < td >邮件:< input type = "text" id = "isEmail" name = "isEmail" ></ td > |
57 | < td >数字:< input type = "text" id = "isNum" name = "isNum" ></ td > |
58 | </ tr > |
59 | < tr > |
60 | < td >数字范围:< input type = "text" id = "isRangeNum" name = "isRangeNum" ></ td > |
61 | < td >a-zA-Z0-9_< input type = "text" id = "isLicit" name = "isLicit" ></ td > |
62 | </ tr > |
63 | < tr > |
64 | < td >判断相等:< input type = "text" id = "isEquals" name = "isEquals" ></ td > |
65 | < td >< input type = "text" id = "isEquals1" name = "isEquals1" ></ td > |
66 | </ tr > |
67 | < tr > |
68 | < td >长度控制:< input type = "text" id = "isRange" name = "isRange" ></ td > |
69 | < td >长度大于控制:< input type = "text" id = "isLess" name = "isLess" ></ td > |
70 | </ tr > |
71 | < tr > |
72 | < td >长度小于控制:< input type = "text" id = "isMore" name = "isMore" ></ td > |
73 | < td >是否为空:< input type = "text" id = "isEmpty" name = "isEmpty" ></ td > |
74 | </ tr > |
75 | < tr > |
76 | < td >< input type = "submit" name = "submit" value = "提交数据" ></ td > |
77 | </ tr > |
78 | </ tbody > |
79 | </ table > |
80 | </ form > |
81 | </ body > |
82 | </ html > |