工作中比较实用的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 相关文章推荐
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
Apr 29 Javascript
JavaScript列表框listbox全选和反选的实现方法
Mar 18 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
Oct 27 Javascript
酷炫jQuery全屏3D焦点图动画效果
Mar 22 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
Jan 17 Javascript
jquery 手势密码插件
Mar 17 Javascript
打字效果动画的4种实现方法(超简单)
Oct 18 Javascript
Vue自定义指令实现checkbox全选功能的方法
Feb 28 Javascript
基于element-ui的rules中正则表达式
Sep 04 Javascript
Node.js事件的正确使用方法
Apr 05 Javascript
vue 实现强制类型转换 数字类型转为字符串
Nov 07 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
Jul 17 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
PHPEXCEL 使用小记
2013/01/06 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
Javascript复制实例详解
2016/01/28 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
python3.4实现邮件发送功能
2018/05/28 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
python 调用有道api接口的方法
2019/01/03 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
人工神经网络算法知识点总结
2019/06/11 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
Python Django view 两种return的实现方式
2020/03/16 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
ORACLE十问
2015/04/20 面试题
小学教师自我鉴定
2013/11/07 职场文书
自我评价怎么写好呢?
2013/12/05 职场文书
销售类求职信
2014/06/13 职场文书
统招统分证明
2015/06/23 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
golang 实现Location跳转方式
2021/05/02 Golang
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技