|
@@ -1,134 +1,147 @@
|
|
|
//公共js,主要做表单验证,以及基本方法封装
|
|
|
const utils = {
|
|
|
- isNullOrEmpty: function(value) {
|
|
|
- //是否为空
|
|
|
- return (value === null || value === '' || value === undefined) ? true : false;
|
|
|
- },
|
|
|
- trim: function(value) {
|
|
|
- //去空格
|
|
|
- return value.replace(/(^\s*)|(\s*$)/g, "");
|
|
|
- },
|
|
|
- isEmail: function(value){
|
|
|
- //是否为邮箱
|
|
|
- return RegExp(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/).test(value);
|
|
|
- },
|
|
|
- isWebsite: function(value){
|
|
|
- //是否为网址
|
|
|
- return RegExp(/^((http|ftp|https):\/\/[a-zA-Z0-9]|[a-zA-Z0-9])[-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?$/).test(value);
|
|
|
- },
|
|
|
- isMobile: function(value) {
|
|
|
- //是否为手机号
|
|
|
- return RegExp(/^1[1-9][0-9]{9}$/).test(value);
|
|
|
- },
|
|
|
- isFloat: function(value) {
|
|
|
- //金额,只允许保留两位小数
|
|
|
- return RegExp(/^([0-9]*[.]?[0-9])[0-9]{0,1}$/).test(value);
|
|
|
- },
|
|
|
- isNum: function(value) {
|
|
|
- //是否全为数字
|
|
|
- return RegExp(/^[0-9]+$/).test(value);
|
|
|
- },
|
|
|
- isEmailCode:function(value) {
|
|
|
- return RegExp(/^\d{4}$/).test(value);
|
|
|
- },
|
|
|
- isMobileCode:function(value) {
|
|
|
- return RegExp(/^\d{6}$/).test(value);
|
|
|
- },
|
|
|
- isCredit:function(value) {//统一社会信用代码
|
|
|
- return RegExp(/^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/).test(value);
|
|
|
- },
|
|
|
- checkPwd: function(value) {//密码为8~20位数字和字母组合
|
|
|
- return RegExp(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/).test(value);
|
|
|
- },
|
|
|
- isNoChinese: function(value) {//数字和字母组合
|
|
|
- return RegExp(/^[A-Za-z0-9]+$/).test(value);
|
|
|
- },
|
|
|
- hidePhone:function(value) {
|
|
|
- return value.replace(/^(\d{3})\d{4}(\d+)/,"$1****$2")
|
|
|
- },
|
|
|
- interceptHtmlFn: function(value){
|
|
|
- return value ? value.replace(/<[^>]+>/g,"") : value
|
|
|
- },
|
|
|
- desensitizationName:function(value){
|
|
|
- if(null != value && value != undefined){
|
|
|
- if(value.length <= 3){
|
|
|
- let ruten = value.substring(1);
|
|
|
- return value.replace(ruten,'**');
|
|
|
- } else if(value.length > 3 && value.length <= 6){
|
|
|
- let ruten = value.substring(2);
|
|
|
- return value.replace(ruten,'**');
|
|
|
- }
|
|
|
- } else {
|
|
|
- return "";
|
|
|
- }
|
|
|
- },
|
|
|
- formatNum: function(num) {
|
|
|
- //格式化手机号码
|
|
|
- if (utils.isMobile(num)) {
|
|
|
- num = num.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
|
|
|
- }
|
|
|
- return num;
|
|
|
- },
|
|
|
- rmoney: function(money) {
|
|
|
- //金额格式化
|
|
|
- return parseFloat(money).toFixed(2).toString().split('').reverse().join('').replace(/(\d{3})/g, '$1,').replace(
|
|
|
- /\,$/, '').split('').reverse().join('');
|
|
|
- },
|
|
|
- bankRegex:function(num){
|
|
|
- let bankNum = ''
|
|
|
- bankNum = num.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 ');
|
|
|
- return bankNum
|
|
|
- },
|
|
|
- checkData:function(value){
|
|
|
- let data;
|
|
|
- if(value == null || value ==""){
|
|
|
- data = ''
|
|
|
- }else{
|
|
|
- data = value
|
|
|
- }
|
|
|
- return data
|
|
|
- },
|
|
|
- formatDate: function(formatStr, fdate) {
|
|
|
- //日期格式化
|
|
|
- if (fdate) {
|
|
|
- if (~fdate.indexOf('.')) {
|
|
|
- fdate = fdate.substring(0, fdate.indexOf('.'));
|
|
|
- }
|
|
|
- fdate = fdate.toString().replace('T', ' ').replace(/\-/g, '/');
|
|
|
- var fTime, fStr = 'ymdhis';
|
|
|
- if (!formatStr)
|
|
|
- formatStr = "y-m-d h:i:s";
|
|
|
- if (fdate)
|
|
|
- fTime = new Date(fdate);
|
|
|
- else
|
|
|
- fTime = new Date();
|
|
|
- var month = fTime.getMonth() + 1;
|
|
|
- var day = fTime.getDate();
|
|
|
- var hours = fTime.getHours();
|
|
|
- var minu = fTime.getMinutes();
|
|
|
- var second = fTime.getSeconds();
|
|
|
- month = month < 10 ? '0' + month : month;
|
|
|
- day = day < 10 ? '0' + day : day;
|
|
|
- hours = hours < 10 ? ('0' + hours) : hours;
|
|
|
- minu = minu < 10 ? '0' + minu : minu;
|
|
|
- second = second < 10 ? '0' + second : second;
|
|
|
- var formatArr = [
|
|
|
- fTime.getFullYear().toString(),
|
|
|
- month.toString(),
|
|
|
- day.toString(),
|
|
|
- hours.toString(),
|
|
|
- minu.toString(),
|
|
|
- second.toString()
|
|
|
- ]
|
|
|
- for (var i = 0; i < formatArr.length; i++) {
|
|
|
- formatStr = formatStr.replace(fStr.charAt(i), formatArr[i]);
|
|
|
- }
|
|
|
- return formatStr;
|
|
|
- } else {
|
|
|
- return "";
|
|
|
- }
|
|
|
- },
|
|
|
- throttle: function(fn, gapTime) {
|
|
|
+ isNullOrEmpty: function(value) {
|
|
|
+ //是否为空
|
|
|
+ return (value === null || value === '' || value === undefined) ? true : false
|
|
|
+ },
|
|
|
+ trim: function(value) {
|
|
|
+ //去空格
|
|
|
+ return value.replace(/(^\s*)|(\s*$)/g, '')
|
|
|
+ },
|
|
|
+ isEmail: function(value){
|
|
|
+ //是否为邮箱
|
|
|
+ return RegExp(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/).test(value)
|
|
|
+ },
|
|
|
+ isWebsite: function(value){
|
|
|
+ //是否为网址
|
|
|
+ return RegExp(/^((http|ftp|https):\/\/[a-zA-Z0-9]|[a-zA-Z0-9])[-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?$/).test(value)
|
|
|
+ },
|
|
|
+ isMobile: function(value) {
|
|
|
+ //是否为手机号
|
|
|
+ return RegExp(/^1[1-9][0-9]{9}$/).test(value)
|
|
|
+ },
|
|
|
+ isFloat: function(value) {
|
|
|
+ //金额,只允许保留两位小数
|
|
|
+ return RegExp(/^([0-9]*[.]?[0-9])[0-9]{0,1}$/).test(value)
|
|
|
+ },
|
|
|
+ isNum: function(value) {
|
|
|
+ //是否全为数字
|
|
|
+ return RegExp(/^[0-9]+$/).test(value)
|
|
|
+ },
|
|
|
+ isEmailCode:function(value) {
|
|
|
+ return RegExp(/^\d{4}$/).test(value)
|
|
|
+ },
|
|
|
+ isMobileCode:function(value) {
|
|
|
+ return RegExp(/^\d{6}$/).test(value)
|
|
|
+ },
|
|
|
+ isCredit:function(value) {//统一社会信用代码
|
|
|
+ return RegExp(/^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/).test(value)
|
|
|
+ },
|
|
|
+ checkPwd: function(value) {//密码为8~20位数字和字母组合
|
|
|
+ return RegExp(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/).test(value)
|
|
|
+ },
|
|
|
+ isNoChinese: function(value) {//数字和字母组合
|
|
|
+ return RegExp(/^[A-Za-z0-9]+$/).test(value)
|
|
|
+ },
|
|
|
+ hidePhone:function(value) {
|
|
|
+ return value.replace(/^(\d{3})\d{4}(\d+)/,'$1****$2')
|
|
|
+ },
|
|
|
+ interceptHtmlFn: function(value){
|
|
|
+ return value ? value.replace(/<[^>]+>/g,'') : value
|
|
|
+ },
|
|
|
+ desensitizationName:function(value){
|
|
|
+ if(null != value && value != undefined){
|
|
|
+ if(value.length <= 3){
|
|
|
+ let ruten = value.substring(1)
|
|
|
+ return value.replace(ruten,'**')
|
|
|
+ } else if(value.length > 3 && value.length <= 6){
|
|
|
+ let ruten = value.substring(2)
|
|
|
+ return value.replace(ruten,'**')
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ formatNum: function(num) {
|
|
|
+ //格式化手机号码
|
|
|
+ if (utils.isMobile(num)) {
|
|
|
+ num = num.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
|
|
|
+ }
|
|
|
+ return num
|
|
|
+ },
|
|
|
+ rmoney: function(money) {
|
|
|
+ //金额格式化
|
|
|
+ return parseFloat(money).toFixed(2).toString().split('').reverse().join('').replace(/(\d{3})/g, '$1,').replace(
|
|
|
+ /\,$/, '').split('').reverse().join('')
|
|
|
+ },
|
|
|
+ bankRegex:function(num){
|
|
|
+ let bankNum = ''
|
|
|
+ bankNum = num.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 ')
|
|
|
+ return bankNum
|
|
|
+ },
|
|
|
+ checkData:function(value){
|
|
|
+ let data
|
|
|
+ if(value == null || value ==''){
|
|
|
+ data = ''
|
|
|
+ }else{
|
|
|
+ data = value
|
|
|
+ }
|
|
|
+ return data
|
|
|
+ },
|
|
|
+ formatAccMul:function(value1, value2) {// 修复数额丢失精度
|
|
|
+ if (value1 == 0 || value2 == 0) {
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+ let m = 0
|
|
|
+ let v1 = value1.toString()
|
|
|
+ let v2 = value2.toString()
|
|
|
+ m += v1.split('.')[1] ? v1.split('.')[1].length : 0
|
|
|
+ m += v2.split('.')[1] ? v2.split('.')[1].length : 0
|
|
|
+ let _v1 = Number(v1.replace('.', ''))
|
|
|
+ let _v2 = Number(v2.replace('.', ''))
|
|
|
+ return (_v1 * _v2) / Math.pow(10, m)
|
|
|
+ },
|
|
|
+ formatDate: function(formatStr, fdate) {
|
|
|
+ //日期格式化
|
|
|
+ if (fdate) {
|
|
|
+ if (~fdate.indexOf('.')) {
|
|
|
+ fdate = fdate.substring(0, fdate.indexOf('.'))
|
|
|
+ }
|
|
|
+ fdate = fdate.toString().replace('T', ' ').replace(/\-/g, '/')
|
|
|
+ var fTime, fStr = 'ymdhis'
|
|
|
+ if (!formatStr)
|
|
|
+ formatStr = 'y-m-d h:i:s'
|
|
|
+ if (fdate)
|
|
|
+ fTime = new Date(fdate)
|
|
|
+ else
|
|
|
+ fTime = new Date()
|
|
|
+ var month = fTime.getMonth() + 1
|
|
|
+ var day = fTime.getDate()
|
|
|
+ var hours = fTime.getHours()
|
|
|
+ var minu = fTime.getMinutes()
|
|
|
+ var second = fTime.getSeconds()
|
|
|
+ month = month < 10 ? '0' + month : month
|
|
|
+ day = day < 10 ? '0' + day : day
|
|
|
+ hours = hours < 10 ? ('0' + hours) : hours
|
|
|
+ minu = minu < 10 ? '0' + minu : minu
|
|
|
+ second = second < 10 ? '0' + second : second
|
|
|
+ var formatArr = [
|
|
|
+ fTime.getFullYear().toString(),
|
|
|
+ month.toString(),
|
|
|
+ day.toString(),
|
|
|
+ hours.toString(),
|
|
|
+ minu.toString(),
|
|
|
+ second.toString()
|
|
|
+ ]
|
|
|
+ for (var i = 0; i < formatArr.length; i++) {
|
|
|
+ formatStr = formatStr.replace(fStr.charAt(i), formatArr[i])
|
|
|
+ }
|
|
|
+ return formatStr
|
|
|
+ } else {
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ throttle: function(fn, gapTime) {
|
|
|
if (gapTime == null || gapTime == undefined) {
|
|
|
gapTime = 1500
|
|
|
}
|
|
@@ -143,49 +156,50 @@ const utils = {
|
|
|
_lastTime = _nowTime
|
|
|
}
|
|
|
}
|
|
|
- },
|
|
|
+ },
|
|
|
|
|
|
- debounce: function(fn, delay, isImmediate) {
|
|
|
- var timer = null; //初始化timer,作为计时清除依据
|
|
|
+ debounce: function(fn, delay, isImmediate) {
|
|
|
+ var timer = null //初始化timer,作为计时清除依据
|
|
|
return function() {
|
|
|
- var context = this; //获取函数所在作用域this
|
|
|
- var args = arguments; //取得传入参数
|
|
|
- clearTimeout(timer);
|
|
|
+ var context = this //获取函数所在作用域this
|
|
|
+ var args = arguments //取得传入参数
|
|
|
+ clearTimeout(timer)
|
|
|
if(isImmediate && timer === null) {
|
|
|
//时间间隔外立即执行
|
|
|
- fn.apply(context,args);
|
|
|
- timer = 0;
|
|
|
- return;
|
|
|
+ fn.apply(context,args)
|
|
|
+ timer = 0
|
|
|
+ return
|
|
|
}
|
|
|
timer = setTimeout(function() {
|
|
|
- fn.apply(context,args);
|
|
|
- timer = null;
|
|
|
- }, delay);
|
|
|
+ fn.apply(context,args)
|
|
|
+ timer = null
|
|
|
+ }, delay)
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
|
- isNullOrEmpty: utils.isNullOrEmpty,
|
|
|
- trim: utils.trim,
|
|
|
- isMobile: utils.isMobile,
|
|
|
- isEmail: utils.isEmail,
|
|
|
- isWebsite:utils.isWebsite,
|
|
|
- isFloat: utils.isFloat,
|
|
|
- isNum: utils.isNum,
|
|
|
- isEmailCode:utils.isEmailCode,
|
|
|
- isMobileCode:utils.isMobileCode,
|
|
|
- isNoChinese:utils.isNoChinese,
|
|
|
- checkPwd: utils.checkPwd,
|
|
|
- formatNum:utils.formatNum,
|
|
|
- rmoney: utils.rmoney,
|
|
|
- formatDate: utils.formatDate,
|
|
|
- bankRegex: utils.bankRegex,
|
|
|
- checkData:utils.checkData,
|
|
|
- hidePhone:utils.hidePhone,
|
|
|
- interceptHtmlFn:utils.interceptHtmlFn,
|
|
|
- desensitizationName:utils.desensitizationName,
|
|
|
- throttle: utils.throttle,
|
|
|
- debounce: utils.debounce
|
|
|
+ isNullOrEmpty: utils.isNullOrEmpty,
|
|
|
+ trim: utils.trim,
|
|
|
+ isMobile: utils.isMobile,
|
|
|
+ isEmail: utils.isEmail,
|
|
|
+ isWebsite:utils.isWebsite,
|
|
|
+ isFloat: utils.isFloat,
|
|
|
+ isNum: utils.isNum,
|
|
|
+ isEmailCode:utils.isEmailCode,
|
|
|
+ isMobileCode:utils.isMobileCode,
|
|
|
+ isNoChinese:utils.isNoChinese,
|
|
|
+ checkPwd: utils.checkPwd,
|
|
|
+ formatNum:utils.formatNum,
|
|
|
+ rmoney: utils.rmoney,
|
|
|
+ formatDate: utils.formatDate,
|
|
|
+ formatAccMul: utils.formatAccMul,
|
|
|
+ bankRegex: utils.bankRegex,
|
|
|
+ checkData:utils.checkData,
|
|
|
+ hidePhone:utils.hidePhone,
|
|
|
+ interceptHtmlFn:utils.interceptHtmlFn,
|
|
|
+ desensitizationName:utils.desensitizationName,
|
|
|
+ throttle: utils.throttle,
|
|
|
+ debounce: utils.debounce
|
|
|
}
|