整顿常常运用的东西类,进步编码效力
正则
整顿一样平常运用较多的用户名,暗码,强暗码,手机号,邮箱,身份证号,QQ以及微信号的考证
class _Regexp {
/**
* 用户名, 4到16位(字母,数字,下划线,减号)
* @param {String} str
*/
isUser(str) {
return /^[a-zA-Z0-9_-]{4,16}$/.test(str)
}
/**
* 暗码, 以字母开首,长度在6~18之间,只能包括字母、数字和下划线
* @param {String} str
*/
isPassword() {
return /^[a-zA-Z]\w{5,17}$/.test(str)
}
/**
* 强暗码, 起码6位,最少1个大写字母,1个小写字母,1个数字,1个特别字符
* @param {String} str
*/
isStrongPassword(str) {
return /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*?]).*$/.test(str)
}
/**
* 手机号
* @param {String} str
*/
isPhone(str) {
return /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/.test(str)
}
/**
* 邮箱
* @param {String} str
*/
isEmail(str) {
return /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(str)
}
/**
* 身份证号
* @param {String} str
*/
isIdCard(str) {
return /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(str)
}
/**
* QQ, 5-11位
* @param {String} str
*/
isQQ(str) {
return /^[1-9][0-9]{4,10}$/.test(str)
}
/**
* 微信, 6-20位,以字母开首,(字母,数字,减号,下划线)
* @param {String} str
*/
isWeChart(str) {
return /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/.test(str)
}
}
字符串
整顿字符串去除一切空格,随机暗码以及怎样检测暗码强度
class _String {
/**
* 去除字符串中一切空格
* @param {String} str
*/
trimAll(str) {
return str.replace(/\s+/g, '')
}
/**
* 随机码, randomPassword(36) -> h9q9b4mytk
* @param {Number} count
*/
randomPassword(count) {
return Math.random().toString(count).substring(2)
}
/**
* 检测暗码强度
* @param {String} str
*/
checkPassword(str) {
let level = 0
if (str.length < 6) {
return level
}
if (/[0-9]/.test(str)) {
level ++
}
if (/[a-z]/.test(str)) {
level ++
}
if (/[A-Z]/.test(str)) {
level ++
}
if (/[\.|_]/.test(str)) {
level ++
}
return level
}
}
数组
数组去重,网上有很多种用法,比方运用indexOf,splice以及ES6种set的新特征。在此给出一个我经常常运用到的数据去重计划。
class _Array {
/**
* 数组去重, 应用对象的特征
* @param {Array} old_arr
*/
removeRepeat(old_arr) {
let new_arr = []
let obj = {}
for (let i = 0, len = old_arr.length; i < len; i++) {
// 对象中是不是存在该属性
if (!obj[old_arr[i]]) {
new_arr.push(old_arr[i])
obj[old_arr[i]] = i
}
}
return new_arr
}
/**
* 数字范例的数组最大值
* @param {Array} arr
*/
maxArr(arr) {
return Math.max.apply(null, arr)
}
/**
* 数字范例的数组最小值
* @param {Array} arr
*/
minArr(arr) {
return Math.min.apply(null, arr)
}
}
Date
class _Date {
/**
* 格式化${startTime}距如今的已过时候
* @param {Date} startTime
*/
formatPassTime(startTime) {
let currentTime = Date.parse(new Date())
let time = currentTime - startTime
let day = parseInt(time / (1000 * 60 * 60 * 24))
let hour = parseInt(time / (1000 * 60 * 60))
let min = parseInt(time / (1000 * 60))
let month = parseInt(day / 30)
let year = parseInt(month / 12)
if (year) {
return year + '年前'
}
if (month) {
return month + '个月前'
}
if (day) {
return day + '天前'
}
if (hour) {
return hour + '小时前'
}
if (min) {
return min + '分钟前'
} else {
return '方才'
}
}
/**
* 格式化如今距${endTime}的剩余时候
* @param {Date} endTime
*/
formatRemainTime(endTime) {
let startDate = new Date()
let endDate = new Date(endTime)
let t = endDate.getTime() - startDate.getTime()
let d = 0
let h = 0
let m = 0
let s = 0
if (t >= 0) {
d = Math.floor(t / 1000 / 3600 / 24)
h = Math.floor(t / 1000 / 60 / 60 % 24)
m = Math.floor(t / 1000 / 60 % 60)
s = Math.floor(t / 1000 % 60)
}
return d + '天 ' + h + '小时 ' + m + '分钟 ' + s + '秒'
}
}
Object
var type = function(o) {
var s = Object.prototype.toString.call(o);
return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};
['Null',
'Undefined',
'Object',
'Array',
'String',
'Number',
'Boolean',
'Function',
'RegExp'
].forEach(function(t) {
type['is' + t] = function(value) {
return type(value) === t.toLowerCase();
};
});
type.isObject({}) // true
type.isNumber(NaN) // true
未完待补充