常用JS验证函数总结

  1 /**************************************************************************************/
  2 /*************************************数字的验证*****************************************/
  3 /**************************************************************************************/
  4 
  5 /**
  6 * 检查输入的一串字符是否全部是数字
  7 * 输入:str  字符串
  8 * 返回:true 或 flase; true表示为数字
  9 */
 10 function checkNum(str){
 11     return str.match(/\D/) ==null;
 12 }
 13 
 14 
 15 /**
 16 * 检查输入的一串字符是否为小数
 17 * 输入:str  字符串
 18 * 返回:true 或 flase; true表示为小数
 19 */
 20 function checkDecimal(str){
 21     if (str.match(/^-?\d+(\.\d+)?$/g) ==null) {
 22         returnfalse;
 23     }
 24     else {
 25         returntrue;
 26     }
 27 }
 28 
 29 /**
 30 * 检查输入的一串字符是否为整型数据
 31 * 输入:str  字符串
 32 * 返回:true 或 flase; true表示为小数
 33 */
 34 function checkInteger(str){
 35     if (str.match(/^[-+]?\d*$/) ==null) {
 36         returnfalse;
 37     }
 38     else {
 39         returntrue;
 40     }
 41 }
 42 
 43 /**************************************************************************************/
 44 /*************************************字符的验证*****************************************/
 45 /**************************************************************************************/
 46 
 47 
 48 /**
 49 * 检查输入的一串字符是否是字符
 50 * 输入:str  字符串
 51 * 返回:true 或 flase; true表示为全部为字符 不包含汉字
 52 */
 53 function checkStr(str){
 54     if (/[^\x00-\xff]/g.test(str)) {
 55         returnfalse;
 56     }
 57     else {
 58         returntrue;
 59     }
 60 }
 61 
 62 
 63 /**
 64 * 检查输入的一串字符是否包含汉字
 65 * 输入:str  字符串
 66 * 返回:true 或 flase; true表示包含汉字
 67 */
 68 function checkChinese(str){
 69     if (escape(str).indexOf("%u") !=-1) {
 70         returntrue;
 71     }
 72     else {
 73         returnfalse;
 74     }
 75 }
 76 
 77 
 78 /**
 79 * 检查输入的邮箱格式是否正确
 80 * 输入:str  字符串
 81 * 返回:true 或 flase; true表示格式正确
 82 */
 83 function checkEmail(str){
 84     if (str.match(/[A-Za-z0-9_-]+[@](\S*)(net|com|cn|org|cc|tv|[0-9]{1,3})(\S*)/g) ==null) {
 85         returnfalse;
 86     }
 87     else {
 88         returntrue;
 89     }
 90 }
 91 
 92 
 93 /**
 94 * 检查输入的手机号码格式是否正确
 95 * 输入:str  字符串
 96 * 返回:true 或 flase; true表示格式正确
 97 */
 98 function checkMobilePhone(str){
 99     if (str.match(/^(?:13\d|15[89])-?\d{5}(\d{3}|\*{3})$/) ==null) {
100         returnfalse;
101     }
102     else {
103         returntrue;
104     }
105 }
106 
107 
108 /**
109 * 检查输入的固定电话号码是否正确
110 * 输入:str  字符串
111 * 返回:true 或 flase; true表示格式正确
112 */
113 function checkTelephone(str){
114     if (str.match(/^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/) ==null) {
115         returnfalse;
116     }
117     else {
118         returntrue;
119     }
120 }
121 
122 /**
123 * 检查QQ的格式是否正确
124 * 输入:str  字符串
125 *  返回:true 或 flase; true表示格式正确
126 */
127 function checkQQ(str){
128     if (str.match(/^\d{5,10}$/) ==null) {
129         returnfalse;
130     }
131     else {
132         returntrue;
133     }
134 }
135 
136 /**
137 * 检查输入的身份证号是否正确
138 * 输入:str  字符串
139 *  返回:true 或 flase; true表示格式正确
140 */
141 function checkCard(str){
142     //15位数身份证正则表达式
143     var arg1 =/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
144     //18位数身份证正则表达式
145     var arg2 =/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[A-Z])$/;
146     if (str.match(arg1) ==null&& str.match(arg2) ==null) {
147         returnfalse;
148     }
149     else {
150         returntrue;
151     }
152 }
153 
154 /**
155 * 检查输入的IP地址是否正确
156 * 输入:str  字符串
157 *  返回:true 或 flase; true表示格式正确
158 */
159 function checkIP(str){
160     var arg =/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
161     if (str.match(arg) ==null) {
162         returnfalse;
163     }
164     else {
165         returntrue;
166     }
167 }
168 
169 /**
170 * 检查输入的URL地址是否正确
171 * 输入:str  字符串
172 *  返回:true 或 flase; true表示格式正确
173 */
174 function checkURL(str){
175     if (str.match(/(http?|ftp):\/\/[^\/+?\..+\w$/i) == null) {
176         returnfalse
177     }
178     else {
179         returntrue;
180     }
181 }
182 
183 /**
184 * 检查输入的字符是否具有特殊字符
185 * 输入:str  字符串
186 * 返回:true 或 flase; true表示包含特殊字符
187 * 主要用于注册信息的时候验证
188 */
189 function checkQuote(str){
190     var items =new Array("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "{", "}", "[", "", "(", ")");
191     items.push(":", ";", "'", "|", "\\", "", "?", "/", "<>", "||", "//");
192     items.push("admin", "administrators", "administrator", "管理员", "系统管理员");
193     items.push("select", "delete", "update", "insert", "create", "drop", "alter", "trancate");
194     str = str.toLowerCase();
195     for (var i =0; i < items.length; i++) {
196         if (str.indexOf(items) >=0) {
197             returntrue;
198         }
199     }
200     returnfalse;
201 }
202 
203 
204 /**************************************************************************************/
205 /*************************************时间的验证*****************************************/
206 /**************************************************************************************/
207 
208 /**
209 * 检查日期格式是否正确
210 * 输入:str  字符串
211 * 返回:true 或 flase; true表示格式正确
212 * 注意:此处不能验证中文日期格式
213 * 验证短日期(2007-06-05)
214 */
215 function checkDate(str){
216     //var value=str.match(/((^((1[8-9]\d{2})|([2-9]\d{3}))(-)(10|12|0?[13578])(-)(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(-)(11|0?[469])(-)(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(-)(0?2)(-)(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)(-)(0?2)(-)(29)$)|(^([3579][26]00)(-)(0?2)(-)(29)$)|(^([1][89][0][48])(-)(0?2)(-)(29)$)|(^([2-9][0-9][0][48])(-)(0?2)(-)(29)$)|(^([1][89][2468][048])(-)(0?2)(-)(29)$)|(^([2-9][0-9][2468][048])(-)(0?2)(-)(29)$)|(^([1][89][13579][26])(-)(0?2)(-)(29)$)|(^([2-9][0-9][13579][26])(-)(0?2)(-)(29)$))/);
217     var value = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
218     if (value ==null) {
219         returnfalse;
220     }
221     else {
222         var date =new Date(value[1], value[3] -1, value[4]);
223         return (date.getFullYear() == value[1] && (date.getMonth() +1) == value[3] && date.getDate() == value[4]);
224     }
225 }
226 
227 /**
228 * 检查时间格式是否正确
229 * 输入:str  字符串
230 * 返回:true 或 flase; true表示格式正确
231 * 验证时间(10:57:10)
232 */
233 function checkTime(str){
234     var value = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/)
235     if (value ==null) {
236         returnfalse;
237     }
238     else {
239         if (value[1] >24|| value[3] >60|| value[4] >60) {
240             returnfalse
241         }
242         else {
243             returntrue;
244         }
245     }
246 }
247 
248 /**
249 * 检查全日期时间格式是否正确
250 * 输入:str  字符串
251 * 返回:true 或 flase; true表示格式正确
252 * (2007-06-05 10:57:10)
253 */
254 function checkFullTime(str){
255     //var value = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/);
256     var value = str.match(/^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/);
257     if (value ==null) {
258         returnfalse;
259     }
260     else {
261         //var date = new Date(checkFullTime[1], checkFullTime[3] - 1, checkFullTime[4], checkFullTime[5], checkFullTime[6], checkFullTime[7]);
262         //return (date.getFullYear() == value[1] && (date.getMonth() + 1) == value[3] && date.getDate() == value[4] && date.getHours() == value[5] && date.getMinutes() == value[6] && date.getSeconds() == value[7]);
263         returntrue;
264     }
265    
266 }
267 
268 
269 
270 
271 /**************************************************************************************/
272 /************************************身份证号码的验证*************************************/
273 /**************************************************************************************/
274 
275 /**  
276 * 身份证15位编码规则:dddddd yymmdd xx p
277 * dddddd:地区码
278 * yymmdd: 出生年月日
279 * xx: 顺序类编码,无法确定
280 * p: 性别,奇数为男,偶数为女
281 * <p />
282 * 身份证18位编码规则:dddddd yyyymmdd xxx y
283 * dddddd:地区码
284 * yyyymmdd: 出生年月日
285 * xxx:顺序类编码,无法确定,奇数为男,偶数为女
286 * y: 校验码,该位数值可通过前17位计算获得
287 * <p />
288 * 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]
289 * 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]
290 * 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )
291 * i为身份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置
292 *
293 */
294 var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];// 加权因子   
295 var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];// 身份证验证位值.10代表X   
296 function IdCardValidate(idCard){
297     idCard = trim(idCard.replace(//g, ""));
298     if (idCard.length ==15) {
299         return isValidityBrithBy15IdCard(idCard);
300     }
301     else
302         if (idCard.length ==18) {
303             var a_idCard = idCard.split("");// 得到身份证数组   
304             if (isValidityBrithBy18IdCard(idCard) && isTrueValidateCodeBy18IdCard(a_idCard)) {
305                 returntrue;
306             }
307             else {
308                 returnfalse;
309             }
310         }
311         else {
312             returnfalse;
313         }
314 }
315 
316 /**  
317 * 判断身份证号码为18位时最后的验证位是否正确
318 * @param a_idCard 身份证号码数组
319 * @return
320 */
321 function isTrueValidateCodeBy18IdCard(a_idCard){
322     var sum =0; // 声明加权求和变量   
323     if (a_idCard[17].toLowerCase() =='x') {
324         a_idCard[17] =10;// 将最后位为x的验证码替换为10方便后续操作   
325     }
326     for (var i =0; i <17; i++) {
327         sum += Wi* a_idCard;// 加权求和   
328     }
329     valCodePosition = sum %11;// 得到验证码所位置   
330     if (a_idCard[17] == ValideCode[valCodePosition]) {
331         returntrue;
332     }
333     else {
334         returnfalse;
335     }
336 }
337 
338 /**  
339 * 通过身份证判断是男是女
340 * @param idCard 15/18位身份证号码
341 * @return 'female'-女、'male'-男
342 */
343 function maleOrFemalByIdCard(idCard){
344     idCard = trim(idCard.replace(//g, ""));// 对身份证号码做处理。包括字符间有空格。   
345     if (idCard.length ==15) {
346         if (idCard.substring(14, 15) %2==0) {
347             return'female';
348         }
349         else {
350             return'male';
351         }
352     }
353     else
354         if (idCard.length ==18) {
355             if (idCard.substring(14, 17) %2==0) {
356                 return'female';
357             }
358             else {
359                 return'male';
360             }
361         }
362         else {
363             returnnull;
364         }
365 }
366 
367 /**  
368 * 验证18位数身份证号码中的生日是否是有效生日
369 * @param idCard 18位书身份证字符串
370 * @return
371 */
372 function isValidityBrithBy18IdCard(idCard18){
373     var year = idCard18.substring(6, 10);
374     var month = idCard18.substring(10, 12);
375     var day = idCard18.substring(12, 14);
376     var temp_date =new Date(year, parseFloat(month) -1, parseFloat(day));
377     // 这里用getFullYear()获取年份,避免千年虫问题   
378     if (temp_date.getFullYear() != parseFloat(year) ||
379     temp_date.getMonth() != parseFloat(month) -1||
380     temp_date.getDate() != parseFloat(day)) {
381         returnfalse;
382     }
383     else {
384         returntrue;
385     }
386 }
387 
388 /**  
389 * 验证15位数身份证号码中的生日是否是有效生日
390 * @param idCard15 15位书身份证字符串
391 * @return
392 */
393 function isValidityBrithBy15IdCard(idCard15){
394     var year = idCard15.substring(6, 8);
395     var month = idCard15.substring(8, 10);
396     var day = idCard15.substring(10, 12);
397     var temp_date =new Date(year, parseFloat(month) -1, parseFloat(day));
398     // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法   
399     if (temp_date.getYear() != parseFloat(year) ||
400     temp_date.getMonth() != parseFloat(month) -1||
401     temp_date.getDate() != parseFloat(day)) {
402         returnfalse;
403     }
404     else {
405         returntrue;
406     }
407 }
408 
409 //去掉字符串头尾空格   
410 function trim(str){
411     return str.replace(/(^\s*)|(\s*$)/g, "");
412 }

 

 

posted @ 2013-10-09 22:38  Zimin  阅读(284)  评论(0编辑  收藏  举报