工作中比较实用的JavaScript验证和数据处理的干货(经典)


Posted in Javascript onAugust 03, 2016

 在开发web项目的时候,难免遇到各种对网页数据的处理,比如对用户在表单中输入的电话号码、邮箱、金额、身份证号、密码长度和复杂程度等等的验证,以及对后台返回数据的格式化比如金额,返回的值为null,还有对指定日期之前或之后某一天或某一月的计算。

遇到需要对数据及表单验证的,我相信大家都像我一样,喜欢在网上找相关的方法,因为自己写的话,是比较耗时的。今天就给大家分享一下,自己在工作中总结的一些常用
的js。

关键代码如下所示:

/** 
* 验证密码复杂度(必须包含数字字母) 
* @param str 
* @returns true:满足规则,false:不满足 
*/ 
function validateStr(str){ 
var reg1 = /^(([0-9]{1,})([a-z]{1,}))|(([a-z]{1,})([0-9]{1,}))$/; 
var reg2 = /^(([0-9]{1,})([A-Z]{1,}))|(([A-Z]{1,})([0-9]{1,}))$/; 
//var reg3 = /^([a-zA-Z]{0,})[0-9a-z-A-z]{0,}[~`!@#$%^&*.]{0,}$/; 
str = valueTrim(str); 
//if(reg3.test(str)){ 
// return true; 
//} 
if(reg1.test(str)){ 
return true; 
} 
if(reg2.test(str)){ 
return true; 
} 
return false; 
} 
/** 
* 判断字符串长度 必须大于8位小于20位,一般用于密码 
* @param str 字符串 
* @returns 满足返回true 
*/ 
function valiDateLength(str){ 
if(str==null || str==''){ 
return false; 
} 
str = valueTrim(str); 
if(parseFloat(str.length)<8 ){ 
return false; 
} 
if(parseFloat(str.length)>20){ 
return false; 
} 
return true; 
} 
/** 
* 验证时间 
* @param dataValue 格式为:YYYY-MM-DD 
* @returns 匹配返回true 不匹配返回false 
*/ 
function valiDate(dateValue){ 
var result = dateValue.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)$))/); 
if(result==null){ 
return false; 
} 
return true; 
} 
/** 
* 验证电话号码 
* @param phoneValue 要验证的电话号码 
* @returns 匹配返回true 不匹配返回false 
*/ 
function validatePhone(phoneValue) { 
phoneValue = valueTrim(phoneValue); 
var reg = /^[1][0-9]{10}$/; 
return reg.test(phoneValue); 
} 
/** 
* 验证邮箱 
* @param emailValue 要验证的邮箱 
* @returns 匹配返回true 不匹配返回false 
*/ 
function validateEmail(emailValue){ 
var reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; 
return reg.test(emailValue); 
} 
/** 
* 判断是否是数字 
* @param numberValue 要验证的数据 
* @returns 匹配返回true 不匹配返回false 
*/ 
function isNumber(numberValue){ 
//定义正则表达式部分 
var reg1 = /^[0-9]{0,}$/; 
var reg2 = /^[1-9]{1}[0-9]{0,}$/; 
//alert(numberValue); 
if(numberValue ==null || numberValue.length==0){ 
return false; 
} 
numberValue = valueTrim(numberValue); 
//判断当数字只有1位时 
if(numberValue.length<2){ 
return reg1.test(numberValue); 
} 
return reg2.test(numberValue);; 
} 
/*** 
* 金额 
* @param value 
* @returns 
*/ 
function isMoney(value) { 
if(value==''){ 
return false; 
} 
value = valueTrim(value); 
value = value.replace(/(^\s*)|(\s*$)/g, ""); 
var reg = /^[0-9]*\.?[0-9]{0,2}$/; 
if(isNumber(value)){ 
return true; 
} 
if(value.length>3){ 
if(value.substr(0, 1)=="0"){ 
if(value.substr(3,value.length).length>2){ 
return false; 
} 
} 
} 
return reg.test(value); 
} 
/*** 
* 判断是否是0到100之间的数 
* @param value 
* @returns 
*/ 
function isZeroToOne(value) { 
if(value==''){ 
return false; 
} 
value = valueTrim(value); 
if(isMyFloat(value)){ 
if(parseFloat(value)<100 && parseFloat(value)>0){ 
return true; 
} 
} 
return false; 
} 
/** 
* 验证是否是浮点数 
* @param floatValue 要验证的数据 
* @returns 匹配返回true 不匹配返回false 
*/ 
function isMyFloat(floatValue){ 
if(floatValue==''){ 
return false; 
} 
floatValue = valueTrim(floatValue); 
var reg = /^(\d+)(\.\d+)$/; 
if(isNumber(floatValue)){ 
return true; 
} 
if(floatValue.length>3){ 
if(floatValue.substr(0, 1)=="0"){ 
if(floatValue.substr(0, 2)!="0."){ 
return false; 
} 
} 
} 
return reg.test(floatValue); 
} 
/** 
* 判断是否是汉字 
* @param charValue 要验证的数据 
* @returns 匹配返回true 不匹配返回false 
*/ 
function isCharacter(charValue){ 
var reg = /^[\u4e00-\u9fa5]{0,}$/; 
return reg.test(charValue); 
} 
/** 
* 验证座机号 
* @param telValue 要验证的座机号 
* @returns 匹配返回true 不匹配返回false 
*/ 
function valiDateTel(telValue){ 
var reg = /^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$/; 
telValue = valueTrim(telValue); 
if(!reg.test(telValue)){ 
return false; 
} 
return true; 
} 
var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加权因子 
var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]; // 身份证验证位值.10代表X 
/** 
* 验证身份证 
* @param idCard 需要验证的身份证号 
* @returns 匹配返回true 不匹配返回false 
*/ 
function IdCardValidate(idCardValue) { 
//去掉字符串头尾空格 
idCardValue = valueTrim(idCardValue.replace(/ /g, "")); 
if (idCardValue.length == 15) { 
//进行15位身份证的验证 
return isValidityBrithBy15IdCard(idCardValue); 
} else if (idCardValue.length == 18) { 
// 得到身份证数组 
var a_idCard = idCardValue.split(""); 
//进行18位身份证的基本验证和第18位的验证 
if(isValidityBrithBy18IdCard(idCardValue)&&isTrueValidateCodeBy18IdCard(a_idCard)){ 
return true; 
}else { 
return false; 
} 
} else { 
return false; 
} 
} 
/** 
* 判断身份证号码为18位时最后的验证位是否正确 
* @param a_idCard 身份证号码数组 
* @return 
*/ 
function isTrueValidateCodeBy18IdCard(a_idCard) { 
var sum = 0; // 声明加权求和变量 
if (a_idCard[17].toLowerCase() == 'x') { 
a_idCard[17] = 10;// 将最后位为x的验证码替换为10方便后续操作 
} 
for ( var i = 0; i < 17; i++) { 
sum += Wi[i] * a_idCard[i];// 加权求和 
} 
valCodePosition = sum % 11; // 得到验证码所位置 
if (a_idCard[17] == ValideCode[valCodePosition]) { 
return true; 
} else { 
return false; 
} 
} 
/** 
* 验证18位数身份证号码中的生日是否是有效生日 
* @param idCard 18位书身份证字符串 
* @return 
*/ 
function isValidityBrithBy18IdCard(idCard18){ 
var year = idCard18.substring(6,10); 
var month = idCard18.substring(10,12); 
var day = idCard18.substring(12,14); 
var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day)); 
// 这里用getFullYear()获取年份,避免千年虫问题 
if(temp_date.getFullYear()!=parseFloat(year) 
||temp_date.getMonth()!=parseFloat(month)-1 
||temp_date.getDate()!=parseFloat(day)){ 
return false; 
}else{ 
return true; 
} 
} 
/** 
* 验证15位数身份证号码中的生日是否是有效生日 
* @param idCard15 15位书身份证字符串 
* @return 
*/ 
function isValidityBrithBy15IdCard(idCard15){ 
var year = idCard15.substring(6,8); 
var month = idCard15.substring(8,10); 
var day = idCard15.substring(10,12); 
var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day)); 
// 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法 
if(temp_date.getYear()!=parseFloat(year) 
||temp_date.getMonth()!=parseFloat(month)-1 
||temp_date.getDate()!=parseFloat(day)){ 
return false; 
}else{ 
return true; 
} 
} 
//去掉字符串头尾空格 
function valueTrim(str) { 
return str.replace(/(^\s*)|(\s*$)/g, ""); 
} 
/** 
* 检验18位身份证号码(15位号码可以只检测生日是否正确即可,自行解决) 
* @param idCardValue 18位身份证号 
* @returns 匹配返回true 不匹配返回false 
*/ 
function idCardVildate(cid){ 
var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子 
var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码 
var reg = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/; 
if(reg.test(cid)){ 
var sum = 0, idx; 
for(var i = 0; i < cid.length - 1; i++){ 
// 对前17位数字与权值乘积求和 
sum += parseInt(cid.substr(i, 1), 10) * arrExp[i]; 
} 
// 计算模(固定算法) 
idx = sum % 11; 
// 检验第18为是否与校验码相等 
return arrValid[idx] == cid.substr(17, 1).toUpperCase(); 
}else{ 
return false; 
} 
} 
/** 
* 获取指定日期之前或之后的第几天 
* 
* @param dayCount 
* 正数为以后时间,负数为以前时间 如:1表示为明天,-1为昨天 
* 
*/ 
function getDateStr(dates, dayCount) { 
var dateTime = dayCount * 24 * 60 * 60 * 1000; 
var dd = new Date(); 
if (dates == "") { 
dd = new Date(); 
} else { 
dd = new Date(dates); 
} 
var dateNumber = dd.getTime() + dateTime; 
var newDate = new Date(dateNumber); 
var y = newDate.getFullYear(); 
var m = newDate.getMonth() + 1;// 获取当前月份的日期 
var d = newDate.getDate(); 
if (m < 10) { 
m = "0" + m; 
} 
if (d < 10) { 
d = "0" + d; 
} 
return y + "-" + m + "-" + d; 
} 
/** 
* 获取指定月份的之前或之后的第几个月 
* 
* @param dayCount 
* 正数为以后月份,负数为以前月份 如:1表示为下月,-1为上月 
* 
*/ 
function getMonthStr(dates, monthCount) { 
var dd = new Date(); 
if (dates == "") { 
dd = new Date(); 
} else { 
dd = new Date(dates); 
} 
var y = dd.getFullYear(); 
var m = dd.getMonth() + 1;// 获取当前月份的日期 
m = m + monthCount; 
if (m == 0) { 
m = "12"; 
y = y - 1; 
} else if (m < 10) { 
m = "0" + m; 
} else if (m > 12) { 
m = m - 12; 
m = "0" + m; 
y = y + 1; 
} 
return y + "-" + m; 
} 
/** 
* 
*对val值为undefined返回“”,否则返回原值 
*/ 
function dealNull(val) { 
if (typeof (val) == "undefined") { 
return ""; 
} else { 
return val; 
} 
}

以上所述是小编给大家介绍的工作中比较实用的JavaScript验证和数据处理的干货(经典),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
May 27 Javascript
浅析js封装和作用域
Jul 09 Javascript
简单的js表单验证函数
Oct 28 Javascript
JavaScript学习笔记整理_关于表达式和语句
Sep 19 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
Jan 20 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
Mar 29 jQuery
javaScript 逻辑运算符使用技巧整理
May 03 Javascript
React组件中的this的具体使用
Feb 28 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
May 11 Javascript
JS插件clipboard.js实现一键复制粘贴功能
Dec 04 Javascript
微信小程序支付PHP代码
Aug 23 Javascript
微信小程序实现一个简单swiper代码实例
Dec 30 Javascript
深入浅出讲解ES6的解构
Aug 03 #Javascript
JS模拟实现方法重载示例
Aug 03 #Javascript
jQuery数组处理函数整理
Aug 03 #Javascript
功能强大的Bootstrap组件(结合js)
Aug 03 #Javascript
AngularJS基础 ng-submit 指令简单示例
Aug 03 #Javascript
一个简单的JavaScript Map实例(分享)
Aug 03 #Javascript
AngularJS教程 ng-style 指令简单示例
Aug 03 #Javascript
You might like
php如何调用webservice应用介绍
2012/11/24 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
PHP调用JAVA的WebService简单实例
2014/03/11 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
浅谈Express.js解析Post数据类型的正确姿势
2019/05/30 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
Python Lambda函数使用总结详解
2019/12/11 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
MADE法国:提供原创设计师家具
2018/09/18 全球购物
体育专业学生自我评价范文
2014/01/17 职场文书
护士节活动总结
2014/08/29 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
不同意离婚上诉状
2015/05/23 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书