发一个利用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>
|