1.邮箱
export const isEmail = (s) => {
return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
}
2.手机号码
export const isMobile = (s) => {
return /^1[0-9]{10}$/.test(s)
}
3.电话号码
export const isPhone = (s) => {
return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
}
4.是否url地址
export const isURL = (s) => {
return /^http[s]?:\/\/.*/.test(s)
}
5.是否是字符串
export const isString = (o) => {
return Object.prototype.toString.call(o).slice(8, -1) === 'String'
}
6.是否是数字
export const isNumber = (o) => {
return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
}
7.是否是boolean
export const isBoolean = (o) => {
return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
}
8.是否是函数
export const isFunction = (o) => {
return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
}
9.是否为null
export const isNull = (o) => {
return Object.prototype.toString.call(0).slice(8, -1) === 'Null'
}
10.是否是undefined
export const isUndefined = (o) => {
return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
}
11.是否对象
export const isObj = (o) => {
return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
}
12.是否是时间
export const isDate = (o) => {
return Object.prototype.toString.call(o).slice(8, -1) === 'Date'
}
13.是否是微信浏览器
export const isWeiXin = () => {
return ua.match(/microMessenger/i) === 'micromessenger'
}
14.是否是移动端
export const isDeviceMobile = () => {
return /android|webos|iphone|ipod|balckberry/i.test(ua)
}
15.是否是QQ浏览器
export const isQQBrowser = () => {
return !!ua.match(/mqqbrowser|qzone|qqbrowser|qbwebviewtype/i)
}
16.是否是ios
export const isIos = () => {
var u = navigator.userAgent
if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { // 安卓手机
return false
} else if (u.indexOf('iPhone') > -1) { // 苹果手机
return true
} else if (u.indexOf('iPad') > -1) { // iPad
return false
} else if (u.indexOf('Windows phone') > -1) { // winphone手机
return false
} else {
return false
}
}
17.是否是pc端
export const isPc = () => {
var userAgentInfo = navigator.userAgent
const Agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod']
let flag = true
for (let v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v] > 0)) {
flag = false
break
}
}
return flag
}
18.获取滚动的坐标
export const getScrollPosition = (el = window) => ({
x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft,
y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop
})
19.滚动到顶部
export const scrollToTop = () => {
const c = document.documentElemnet.scrollTop || document.body.scrollTop
if (c > 0) {
window.requestAnimationFrame(scrollToTop)
window.scrollTo(0, c - c / 8)
}
}
20.el是否在视口范围内
export const elementIsVisibleInViewport = (el, partiallyVisible = false) => {
const { top, left, bottom, right } = el.getBoundingClientRect()
const { innerHeight, innerWidth } = window
return partiallyVisible
? ((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) &&
((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth))
: top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth
}
21.判断类型集合
export const checkStr = (str, type) => {
switch (type) {
case 'phone': //手机号码
return /^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str);
case 'tel': //座机
return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
case 'card': //身份证
return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str);
case 'pwd': //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
return /^[a-zA-Z]\w{5,17}$/.test(str)
case 'postal': //邮政编码
return /[1-9]\d{5}(?!\d)/.test(str);
case 'QQ': //QQ号
return /^[1-9][0-9]{4,9}$/.test(str);
case 'email': //邮箱
return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
case 'money': //金额(小数点2位)
return /^\d*(?:\.\d{0,2})?$/.test(str);
case 'URL': //网址
return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
case 'IP': //IP
return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);
case 'date': //日期时间
return /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str) || /^(\d{4})\-(\d{2})\-(\d{2})$/.test(str)
case 'number': //数字
return /^[0-9]$/.test(str);
case 'english': //英文
return /^[a-zA-Z]+$/.test(str);
case 'chinese': //中文
return /^[\\u4E00-\\u9FA5]+$/.test(str);
case 'lower': //小写
return /^[a-z]+$/.test(str);
case 'upper': //大写
return /^[A-Z]+$/.test(str);
case 'HTML': //HTML标记
return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
default:
return true;
}
}
22.严格的身份证校验
export const isCardId = (sId) => {
if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
console.log('你输入的身份证长度或者格式错误')
return false
}
//身份证城市
const aCity = {
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: '新疆',
71: '台湾',
81: '香港',
82: '澳门',
91: '国外'
}
if (!aCity[parseInt(sId.substr(0, 2))]) {
console.log('你的身份证地区非法')
return false
}
// 出生日期验证
const sBirthday = (sId.substr(6, 4) + '-' + Number(sId.substr(10, 2)) + '-' + Number(sId.substr(12, 2))).replace(/-/g, '/')
const d = new Date(sBirthday)
if (sBirthday !== (d.getFullYear() + '/' + (d.getMonth() + 1) + '/' + d.getDate())) {
console.log('身份证上的出生日期非法')
return false
}
// 身份证号码校验
let sum = 0
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
const codes = '10X98765432'
for (let i = 0; i < sId.length - 1; i++) {
sum += sId[i] * weights[i]
}
const last = codes[sum % 11] // 计算出来的最后以为身份证号码
if (sId[sId.length - 1] !== last) {
console.log('你输入的身份证号非法')
return false
}
return false
}
23.随机数范围 返回min(包含)~max(包含)之间的数字
export const random = (min, max) => {
if (argumnets.length === 2) {
return Math.floor(min + Math.random() * ((max + 1) - min))
}
}
24.判断一个元素是否在数组中
export const contains = (arr, val) => {
// return arr.indexOf(val) !== -1 ? true : false
}
25.数组排序,type:1 从小到大 2:从大到小 3:随机
export const sort = (arr, type = 1) => {
return arr.sort((a, b) => {
switch (type) {
case 1:
return a - b
case 2:
return b - a
case 3:
return Math.random() - 0.5
default:
return arr
}
})
}
26.去重
export const unique = (arr) => {
if (Array.hasOwnProperty('from')) {
return Array.form(new Set(arr))
} else {
const n = {}; const r = []
for (let i = 0; i < arr.length; i++) {
if (!n[arr[i]]) {
n[arr[i]] = true
r.push(arr[i])
}
}
return r
}
}
27.删除其中一个元素
export const remove = (arr, ele) => {
const index = arr.indexOf(ele)
if (index > -1) {
arr.splice(index, 1)
}
return arr
}
28.将类数组转换为数组
export const formArray = (ary) => {
let arr = []
if (Array.isArray(ary)) {
arr = ary
} else {
arr = Array.prototype.slice.call(ary)
}
return arr
}
29.最大值
export const max = (arr) => {
return Math.max.apply(null, arr)
}
30.最小值
export const min = (arr) => {
return Math.min.apply(null, arr)
}
31.求和
export const sum = (arr) => {
return arr.reduce((pre, cur) => {
return pre + cur
})
}
32.平均值
export const average = (arr) => {
return this.sum(arr) / arr.length
}
33.去除空格 type:1所有空格 2:前后空格 3:前空格 4:后空格
export const trim = (str, type) => {
type = type || 1
switch (type) {
case 1:
return str.replace(/\s+/g, '')
case 2:
return str.replace(/(^\s*)|(\s*$)/g, '')
case 3:
return str.replace(/(^\s*)/g, '')
case 4:
return str.replace(/(\s*$)/g, '')
default:
return str
}
}
34.监测密码强度
export const checkPwd = (str) => {
let Lv = 0
if (str.length < 6) {
return Lv
}
if (/[0-9]/.test(str)) {
Lv++
}
if (/[a-z]/.test(str)) {
Lv++
}
if (/[A-Z]/.test(str)) {
Lv++
}
if (/[\.|-|_]/.test(str)) {
Lv++
}
return Lv
}
35.函数节流器
export const debouncer = (fn, time, interval = 200) => {
if (time - (window.debounceTimestamp || 0) > interval) {
fn && fn()
window.debounceTimestamp = time
}
}
36.判断两个对象是否键值相同
export const isObjectEqual = (a, b) => {
const aProps = Object.getOwnPropertyNames(a)
const bProps = Object.getOWnPropertyNames(b)
if (aProps.length !== bProps.length) {
return false
}
for (let i = 0; i < aProps.length; i++) {
const propName = aProps[i]
if (a[propName] !== b[propName]) {
return false
}
}
return false
}
网友评论