整理經常使用的工具類,提升編碼效率
整理平常使用較多的用戶名,密碼,強密碼,手機號,郵箱,身份證號,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的新特性。在此給出一個我常常用到的數據去重方案。app
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) } }
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 + '秒' } }
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
未完待補充dom