1、纯数字校验
export const checkIsNumber = value => {
const numberReg = /^[0-9]*$/;
return numberReg.test(value);
}
2、手机号校验正则
export const isPhoneNum = num => {
const reg = /^1[345678]\d{9}$/;
return reg.test(num);
}
3、验证身份证号(15位或18位数字):
export const isUserId = value => {
const numberReg = /^\d{15}|\d{}18$/;
return numberReg.test(value);
}
4、密码安全登记校验
export const pswIsAllow = psw =>{
const pswLeve = [{
reg: /\d+/
},
{
reg: /[a-z]+/
},
{
reg: /[A-Z]+/
},
{
reg: /[~!@#\$%^&*\(\)\{\};,.\?\/'"]/
}
];
if(psw.indexOf(' ')!=-1){
return false;
}
let level = 0;
for (var j = pswLeve.length - 1; j >= 0; j--) {
if (pswLeve[j].reg.test(psw)) {
level += 1;
}
}
return level;
}
5、检测设备
export const IsPC = () => {
let userAgentInfo = navigator.userAgent;
let Agents = [
"Android",
"iPhone",
"SymbianOS",
"Windows Phone",
"iPad",
"iPod"
];
let flag = true; //true 代表PC false代表移动端
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) != -1) {
flag = false;
break;
}
}
return flag;
};
6、获取url后的参数
export const urlParams = () => {
const fullUrl = location.href;
const url = fullUrl.substr(fullUrl.indexOf("?")); //获取url中"?"符后的字串
const theRequest = new Object();
if (url.indexOf("?") != -1) {
const str = url.substr(1);
const strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
}
}
return theRequest;
};
7、* 时间戳格式化
* @param time 需要转化的时间戳
* @param split 以特定符号分割
*/
export const formatTime = (time, split) => {
let date = new Date(time - 0);
let s = split;
if (!s) {
s = '-'
}
let year = date.getFullYear(),
month = date.getMonth() + 1, //月份是从0开始的
day = date.getDate(),
hour = date.getHours(),
min = date.getMinutes(),
sec = date.getSeconds();
let newTime =
year +
s +
(month < 10 ? "0" + month : month) +
s +
(day < 10 ? "0" + day : day) +
" " +
(hour < 10 ? "0" + hour : hour) +
":" +
(min < 10 ? "0" + min : min) +
":" +
(sec < 10 ? "0" + sec : sec);
return newTime;
}
8、倒计时(默认开始时间为当前时间)
* 倒计时(默认开始时间为当前时间)
* @param endTime 结束时间
* @returns 时间对象
*/
const getEndTime = (startTime, endTime) => {
const startDate = startTime || new Date(); //开始时间,当前时间
const endDate = new Date(endTime); //结束时间,需传入时间参数
const t = endDate.getTime() - startDate.getTime(); //时间差的毫秒数
let d = 0,
h = 0,
m = 0,
s = 0;
if (t >= 0) {
d = Math.floor(t / 1000 / 3600 / 24) > 10 ? Math.floor(t / 1000 / 3600 / 24) : '0' + Math.floor(t / 1000 / 3600 / 24);
h = Math.floor(t / 1000 / 60 / 60 % 24) > 10 ? Math.floor(t / 1000 / 60 / 60 % 24) > 10 : '0' + Math.floor(t / 1000 / 60 / 60 % 24) > 10;
m = Math.floor(t / 1000 / 60 % 60) > 10 ? Math.floor(t / 1000 / 60 % 60) : '0' + Math.floor(t / 1000 / 60 % 60);
s = Math.floor(t / 1000 % 60) > 10 ? Math.floor(t / 1000 % 60) : '0' + Math.floor(t / 1000 % 60);
}
return {
day: d,
hour: h,
minute: m,
second: s
}
}
8、支付密码不能为2位以上连续数字
export const payPassword = password => {
let reg1 = /^[0-9A-Za-z]{6,}$/g
let reg2 = /(.)*(.)\2{2}(.)*/g;
if (reg1.test(password) && !reg2.test(password)) {
console.log('密码符合规则');
return true;
} else {
console.log('密码不符合规则');
return false;
}
}
9、银行卡号4位一空格格式化
let formatBankCode = (value) => {
return value.replace(/(.{4})/g, "$1 ");
}
10、差的毫秒数转换为天数
*/
/**
*相差的毫秒数转换为天数
*/
export const DateDiff=(sDate1, sDate2)=>{
console.log(sDate1, sDate2,'sDate1, sDate2');
var aDate, oDate1, oDate2, iDays
aDate = sDate1.split("-")
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) //转换为12-18-2002格式
aDate = sDate2.split("-")
oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24) //把相差的毫秒数转换为天数
return iDays
}
11、验证对象属性值都不能为空
/**
* 请求参数验证
* params 的所有属性值都不能为空
* 参数验证
* if(!this.paramsValidate(params)) return;
*/
export const paramsValidate = (params) => {
let flag = true;
for (var key in params) {
if (params[key] != '0' && !params[key]) {
console.log(key, '为空的属性');
return false; // 终止程序
}
}
return flag;
}
12、支付密码不能为2位以上连续数字
export function passwordReg(testStr) {
// const regIsNumber = /(?=.*[0-9])/g; //是否是数字
const regIsNumber = /^[0-9]+$/g; //是否是数字
const regCfNumber = /(\w)*(\w)\2{2}(\w)*/g; //是否重复3次
let isNumber = regIsNumber.test(testStr);
let isCfNumber = regCfNumber.test(JSON.stringify(testStr));
let isLxNumber = lxStr(JSON.stringify(testStr));
if (isNumber && !isCfNumber && !isLxNumber) {
return true
} else {
return false
}
}
// 输入连续字符(123,abc)检测
function lxStr(str) {
let arr = str.split("");
let flag = false;
for (let i = 1; i < arr.length - 1; i++) {
let firstIndex = arr[i - 1].charCodeAt();
let secondIndex = arr[i].charCodeAt();
let thirdIndex = arr[i + 1].charCodeAt();
thirdIndex - secondIndex == 1;
secondIndex - firstIndex == 1;
if (thirdIndex - secondIndex == 1 && secondIndex - firstIndex == 1) {
flag = true;
}
}
if (!flag) {
return flag;
}
return flag;
}
13、验证商户注册号码(社会信用代码)格式(15位或15位数字)
/**
* 验证商户注册号码(社会信用代码)格式(15位或15位数字)
* @param value 校验参数
* @return boolean
*/
export const isLegalRegisterNo = value => {
const legalPattern = /^[A-Za-z0-9]{15}$|^[A-Za-z0-9]{18}$/;
return legalPattern.test(value);
}
14、键盘输入2位小数
//键盘输入
onInput(key) {
if(this.params.totalAmount.indexOf(".")!=-1){ //不能输入2个小数点
if(key== "."){
return
}
}
const reg = /^(\-)*(\d+)\.(\d\d).*$/;
const reg2=/\.{2,}/g;
if (reg.test(this.params.totalAmount)) { //2位小数
return false;
}else if(this.params.totalAmount.length == 7){ //小数点前7位,后2位
if (key == ".") {
this.params.totalAmount = (this.params.totalAmount + key) + ''; //赋值
} else {
return;
}
}else if(this.params.totalAmount.length > 7){
const reg = /^(\-)*(\d+)\.(\d\d).*$/;//2位小数
if (reg.test(this.params.totalAmount)) {
return false;
}
this.params.totalAmount = this.params.totalAmount + key + ""; //赋值
}
else {
this.params.totalAmount = (this.params.totalAmount + key) + ''; //赋值
this.params.totalAmount=this.params.totalAmount.replace(/\.{2,}/g,".")//只保留第一个. 清除多余的
if ( this.params.totalAmount.length == 1 &&this.params.totalAmount == ".") { //如果首位输入。 默认为0.
this.params.totalAmount = "0.";
}else if( this.params.totalAmount.indexOf(".")< 0 && this.params.totalAmount !="00"){ //处理01 02 09 这种 默认为1 2 9
this.params.totalAmount=parseFloat( this.params.totalAmount)
}else {
}
}
},
15、 校验手机号码
isPhone (val) {
var patrn = /^(((1[3456789][0-9]{1})|(15[0-9]{1}))+\d{8})$/
if (!patrn.test(val) || val === '') {
return false
} else {
return true
}
},
16、检验车牌号
// 检验车牌号
isCarNum (val) {
var patrn = /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1})$/
var patrn2 = /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))$/
if (!patrn.test(val) && !patrn2.test(val)) {
return false
} else {
return true
}
},
17、校验车架号
// 校验车架号
isVehicle (val) {
var patrn = /^[A-HJ-NP-Za-hj-np-z0-9]+$/
if (!patrn.test(val) || val === '') {
return false
} else {
return true
}
},
18、强检验身份证号码
```javascript
isSfz ( idcard) {
var Errors = [ 1 , '身份证号码位数不对' , '出生日期错误' , '身份证号码错误' , '身份证地区非法' ]
var area = { 11 : '北京' , 12 : '天津' , 13 : '河北' , 14 : '山西' , 15 : '内蒙古' , 21 : '辽宁' , 22 : '吉林' , 23 : '黑龙江' , 31 : '上海' , 32 : '江苏' , 33 : '浙江' , 34 : '安徽' , 35 : '福建' , 36 : '江西' , 37 : '山东' , 41 : '河南' , 42 : '湖北' , 43 : '湖南' , 44 : '广东' , 45 : '广西' , 46 : '海南' , 50 : '重庆' , 51 : '四川' , 52 : '贵州' , 53 : '云南' , 54 : '西藏' , 61 : '陕西' , 62 : '甘肃' , 63 : '青海' , 64 : '宁夏' , 65 : 'xinjiang' , 71 : '台湾' , 81 : '香港' , 82 : '澳门' , 91 : '国外' }
var Y, JYM
var S, M, ereg, Err
var arr = [ ]
arr = idcard. split ( '' )
if ( area[ parseInt ( idcard. substr ( 0 , 2 ) ) ] == null) {
Err = Errors[ 4 ]
return Err
}
switch ( idcard. length) {
case 15 :
if ( ( parseInt ( idcard. substr ( 6 , 2 ) ) + 1900 ) % 4 == = 0 || ( ( parseInt ( idcard. substr ( 6 , 2 ) ) + 1900 ) % 100 == = 0 && ( parseInt ( idcard. substr ( 6 , 2 ) ) + 1900 ) % 4 == = 0 ) ) {
ereg = / ^ [ 1 - 9 ] [ 0 - 9 ] { 5 } [ 0 - 9 ] { 2 } ( ( 01 | 03 | 05 | 07 | 08 | 10 | 12 ) ( 0 [ 1 - 9 ] | [ 1 - 2 ] [ 0 - 9 ] | 3 [ 0 - 1 ] ) | ( 04 | 06 | 09 | 11 ) ( 0 [ 1 - 9 ] | [ 1 - 2 ] [ 0 - 9 ] | 30 ) | 02 ( 0 [ 1 - 9 ] | [ 1 - 2 ] [ 0 - 9 ] ) ) [ 0 - 9 ] { 3 } $/
} else {
ereg = / ^ [ 1 - 9 ] [ 0 - 9 ] { 5 } [ 0 - 9 ] { 2 } ( ( 01 | 03 | 05 | 07 | 08 | 10 | 12 ) ( 0 [ 1 - 9 ] | [ 1 - 2 ] [ 0 - 9 ] | 3 [ 0 - 1 ] ) | ( 04 | 06 | 09 | 11 ) ( 0 [ 1 - 9 ] | [ 1 - 2 ] [ 0 - 9 ] | 30 ) | 02 ( 0 [ 1 - 9 ] | 1 [ 0 - 9 ] | 2 [ 0 - 8 ] ) ) [ 0 - 9 ] { 3 } $/
}
if ( ereg. test ( idcard) ) {
Err = Errors[ 0 ]
} else {
Err = Errors[ 2 ]
}
return Err
case 18 :
if ( parseInt ( idcard. substr ( 6 , 4 ) ) % 4 == = 0 || ( parseInt ( idcard. substr ( 6 , 4 ) ) % 100 == = 0 && parseInt ( idcard. substr ( 6 , 4 ) ) % 4 == = 0 ) ) {
ereg = / ^ [ 1 - 9 ] [ 0 - 9 ] { 5 } 19 [ 0 - 9 ] { 2 } ( ( 01 | 03 | 05 | 07 | 08 | 10 | 12 ) ( 0 [ 1 - 9 ] | [ 1 - 2 ] [ 0 - 9 ] | 3 [ 0 - 1 ] ) | ( 04 | 06 | 09 | 11 ) ( 0 [ 1 - 9 ] | [ 1 - 2 ] [ 0 - 9 ] | 30 ) | 02 ( 0 [ 1 - 9 ] | [ 1 - 2 ] [ 0 - 9 ] ) ) [ 0 - 9 ] { 3 } [ 0 - 9 Xx] $/
} else {
ereg = / ^ [ 1 - 9 ] [ 0 - 9 ] { 5 } 19 [ 0 - 9 ] { 2 } ( ( 01 | 03 | 05 | 07 | 08 | 10 | 12 ) ( 0 [ 1 - 9 ] | [ 1 - 2 ] [ 0 - 9 ] | 3 [ 0 - 1 ] ) | ( 04 | 06 | 09 | 11 ) ( 0 [ 1 - 9 ] | [ 1 - 2 ] [ 0 - 9 ] | 30 ) | 02 ( 0 [ 1 - 9 ] | 1 [ 0 - 9 ] | 2 [ 0 - 8 ] ) ) [ 0 - 9 ] { 3 } [ 0 - 9 Xx] $/
}
if ( ereg. test ( idcard) ) {
S = ( parseInt ( arr[ 0 ] ) + parseInt ( arr[ 10 ] ) ) * 7 + ( parseInt ( arr[ 1 ] ) + parseInt ( arr[ 11 ] ) ) * 9 + ( parseInt ( arr[ 2 ] ) + parseInt ( arr[ 12 ] ) ) * 10 + ( parseInt ( arr[ 3 ] ) + parseInt ( arr[ 13 ] ) ) * 5 + ( parseInt ( arr[ 4 ] ) + parseInt ( arr[ 14 ] ) ) * 8 + ( parseInt ( arr[ 5 ] ) + parseInt ( arr[ 15 ] ) ) * 4 + ( parseInt ( arr[ 6 ] ) + parseInt ( arr[ 16 ] ) ) * 2 + parseInt ( arr[ 7 ] ) * 1 + parseInt ( arr[ 8 ] ) * 6 + parseInt ( arr[ 9 ] ) * 3
Y = S % 11
M = 'F'
JYM = '10X98765432'
M = JYM. substr ( Y, 1 )
if ( M == = arr[ 17 ] ) {
Err = Errors[ 0 ]
} else {
Err = Errors[ 3 ]
}
} else {
Err = Errors[ 2 ]
}
return Err
default :
Err = Errors[ 1 ]
return Err
}
} ,
19、判断输入框是否有表情
isEmojiCharacter (substring) {
for (var i = 0; i < substring.length; i++) {
const hs = substring.charCodeAt(i)
if (hs >= 0xd800 && hs <= 0xdbff) {
if (substring.length > 1) {
const ls = substring.charCodeAt(i + 1)
var uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000
if (uc >= 0x1d000 && uc <= 0x1f77f) {
return true
}
}
} else if (substring.length > 1) {
const ls = substring.charCodeAt(i + 1)
if (ls === 0x20e3) {
return true
}
} else {
if (hs >= 0x2100 && hs <= 0x27ff) {
return true
} else if (hs >= 0x2B05 && hs <= 0x2b07) {
return true
} else if (hs >= 0x2934 && hs <= 0x2935) {
return true
} else if (hs >= 0x3297 && hs <= 0x3299) {
return true
} else if (hs === 0xa9 || hs === 0xae || hs === 0x303d || hs === 0x3030 ||
hs === 0x2b55 || hs === 0x2b1c || hs === 0x2b1b || hs === 0x2b50) {
return true
}
}
}
},
20、压缩图片
dealImage (path, obj, callback) {
var img = new Image()
img.src = path
img.onload = function () {
var that = this
// 默认按比例压缩
var w = that.width
var h = that.height
var scale = w / h
w = obj.width || w
h = obj.height || w / scale
var quality = 0.5 // 默认图片质量为0.7
// 生成canvas
var canvas = document.createElement('canvas')
var ctx = canvas.getContext('2d')
// 创建属性节点
var anw = document.createAttribute('width')
anw.nodeValue = w
var anh = document.createAttribute('height')
anh.nodeValue = h
canvas.setAttributeNode(anw)
canvas.setAttributeNode(anh)
ctx.drawImage(that, 0, 0, w, h)
// 图像质量
if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
quality = obj.quality
}
// quality值越小,所绘制出的图像越模糊
var base64 = canvas.toDataURL('image/jpeg', quality)
// 回调函数返回base64的值
callback(base64)
}
},
21、图片转成base64
getImgData (img, dir, next) {
var image = new Image()
image.onload = function () {
var degree = 0
var drawWidth
var drawHeight
var width
var height
drawWidth = this.naturalWidth
drawHeight = this.naturalHeight
// 以下改变一下图片大小
var canvas = document.createElement('canvas')
canvas.width = width = drawWidth
canvas.height = height = drawHeight
var context = canvas.getContext('2d')
// 判断图片方向,重置canvas大小,确定旋转角度,iphone默认的是home键在右方的横屏拍摄方式
switch (dir) {
// iphone横屏拍摄,此时home键在左侧
case 3:
degree = 180
drawWidth = -width
drawHeight = -height
break
// iphone竖屏拍摄,此时home键在下方(正常拿手机的方向)
case 6:
canvas.width = height
canvas.height = width
degree = 90
drawWidth = width
drawHeight = -height
break
// iphone竖屏拍摄,此时home键在上方
case 8:
canvas.width = height
canvas.height = width
degree = 270
drawWidth = -width
drawHeight = height
break
}
// 使用canvas旋转校正
context.rotate((degree * Math.PI) / 180)
context.drawImage(this, 0, 0, drawWidth, drawHeight)
// 返回校正图片
next(canvas.toDataURL('image/jpeg', 0.8))
}
image.src = img
},
22、根据字符串截取
getStr(string,str){
var str_before = string.split(str)[0];
var str_after = string.split(str)[1];
return str_before
},
getStr(str,',')
23、相差的毫秒数转换为天数
/**
*相差的毫秒数转换为天数
*/
export const DateDiff = (sDate1, sDate2) => {
console.log(sDate1, sDate2, 'sDate1, sDate2');
var aDate, oDate1, oDate2, iDays
aDate = sDate1.split("-")
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) //转换为12-18-2002格式
aDate = sDate2.split("-")
oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24) //把相差的毫秒数转换为天数
return iDays
}
24、检测是否是IE
export const isIE= () =>{
if (!!window.ActiveXobject || "ActiveXObject" in window) {
return true;
} else {
return false;
}
}
export const isIE11= () =>{
if((/Trident\/7\./).test(navigator.userAgent)) {
return true;
} else {
return false;
}
}
25、params 的所有属性值都不能为空
/**
* 请求参数验证
* params 的所有属性值都不能为空
* 参数验证
* if(!this.paramsValidate(params)) return;
*/
export const paramsValidate = (params) => {
let flag = true;
for (var key in params) {
if (params[key] != '0' && !params[key]) {
console.log(params[key], '为空的属性');
Toast.info('请完善数据')
return false; // 终止程序
}
}
return flag;
}