js验证网址等Javascript常见验证代码合集
发一个利用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 > |