ph-utils 0.2.23 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +21 -0
- package/README.md +11 -11
- package/lib/date.d.ts +55 -34
- package/lib/date.js +203 -126
- package/lib/dom.d.ts +92 -92
- package/lib/dom.js +190 -190
- package/lib/file.d.ts +31 -34
- package/lib/file.js +96 -99
- package/lib/index.d.ts +97 -61
- package/lib/index.js +171 -96
- package/lib/server.d.ts +32 -39
- package/lib/server.js +77 -93
- package/lib/validator.d.ts +47 -47
- package/lib/validator.js +212 -215
- package/lib/web.d.ts +13 -55
- package/lib/web.js +57 -141
- package/package.json +10 -9
- package/lib/date_m.d.ts +0 -34
- package/lib/date_m.js +0 -119
- package/lib/index_m.d.ts +0 -61
- package/lib/index_m.js +0 -82
- package/lib/validator_m.d.ts +0 -47
- package/lib/validator_m.js +0 -210
package/lib/web.js
CHANGED
@@ -1,141 +1,57 @@
|
|
1
|
-
/**
|
2
|
-
* web(浏览器) 端工具类
|
3
|
-
*/
|
4
|
-
import { isBlank } from './
|
5
|
-
/**
|
6
|
-
* 解析 Form 表单中的 input 元素的数据为 JSON 格式,key: input-name;value: input-value
|
7
|
-
* @param form {object} Form 节点对象
|
8
|
-
*/
|
9
|
-
export const formJson = function (form) {
|
10
|
-
let elems = form.elements;
|
11
|
-
let value = {};
|
12
|
-
for (let i = 0, len = elems.length; i < len; i++) {
|
13
|
-
let item = elems[i];
|
14
|
-
if (!isBlank(item.name)) {
|
15
|
-
if ((item.tagName === 'INPUT' || item.tagName === 'TEXTAREA') &&
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
*
|
34
|
-
* @
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
let
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
oldValue
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
}
|
59
|
-
export function random() {
|
60
|
-
let r = Math.random();
|
61
|
-
const startOrLen = arguments[0];
|
62
|
-
let endOrFirstZero = arguments[1];
|
63
|
-
if (typeof endOrFirstZero === 'number') {
|
64
|
-
/* 生成两个数字之间的随机数(number) */
|
65
|
-
let opts = arguments[3];
|
66
|
-
const dftOpts = { isInt: true };
|
67
|
-
opts = Object.assign(dftOpts, opts || {});
|
68
|
-
const e = opts.isInt && opts.hasEnd ? 1 : 0;
|
69
|
-
const rs = r * (endOrFirstZero - startOrLen + e) + startOrLen;
|
70
|
-
return opts.isInt ? parseInt(rs, 10) : rs;
|
71
|
-
}
|
72
|
-
endOrFirstZero = endOrFirstZero || true;
|
73
|
-
if (endOrFirstZero) {
|
74
|
-
// 生成的数字包含前面的0
|
75
|
-
r = r.toString();
|
76
|
-
return r.substr(r.indexOf('.') + 1, startOrLen);
|
77
|
-
}
|
78
|
-
const max = Math.pow(10, startOrLen - 1);
|
79
|
-
r = parseInt(String(r * max), 10);
|
80
|
-
if (r < max) {
|
81
|
-
// 生成的随机数前置有0,重新生成随机数
|
82
|
-
return random(startOrLen, endOrFirstZero);
|
83
|
-
}
|
84
|
-
return r;
|
85
|
-
}
|
86
|
-
/**
|
87
|
-
* 将金额数字格式化为金额格式显示并且会保留两位小数[去除多余的位数,不是四舍五入,而是直接舍去] 1234523432.23 => 123,123,123.23
|
88
|
-
* @param {number} number 待转换的金额数字
|
89
|
-
* @return string
|
90
|
-
*/
|
91
|
-
export function formatMoney(number) {
|
92
|
-
number = number || 0;
|
93
|
-
let negative = '';
|
94
|
-
let base = String(parseInt(number, 10)); // 获取数字整数部分
|
95
|
-
let mod = base.length > 3 ? base.length % 3 : 0;
|
96
|
-
/*
|
97
|
-
* 利用 正则前瞻 (?=) 将3位数字后面还紧跟一位数字的三位数字替换为 数字, 的形式
|
98
|
-
*/
|
99
|
-
let numberStr = String(number);
|
100
|
-
let usePrecision = numberStr.indexOf('.');
|
101
|
-
let dotStr = usePrecision > 0 ? numberStr.slice(usePrecision + 1) : '00';
|
102
|
-
dotStr = dotStr.length > 2 ? dotStr.slice(0, 2) : dotStr;
|
103
|
-
return (negative +
|
104
|
-
(mod ? base.slice(0, mod) + ',' : '') +
|
105
|
-
base.slice(mod).replace(/(\d{3})(?=\d)/g, '$1,') +
|
106
|
-
'.' +
|
107
|
-
dotStr);
|
108
|
-
}
|
109
|
-
/**
|
110
|
-
* 函数节流 - 每隔单位时间,只执行一次
|
111
|
-
* @param cb 待节流的函数
|
112
|
-
* @param wait 间隔时间
|
113
|
-
* @returns
|
114
|
-
*/
|
115
|
-
export function throttle(fn, wait = 500) {
|
116
|
-
// 上一次的请求时间
|
117
|
-
let last = 0;
|
118
|
-
return (...args) => {
|
119
|
-
// 当前时间戳
|
120
|
-
const now = Date.now();
|
121
|
-
if (now - last > wait) {
|
122
|
-
fn(...args);
|
123
|
-
last = now;
|
124
|
-
}
|
125
|
-
};
|
126
|
-
}
|
127
|
-
/**
|
128
|
-
* 函数防抖 - 当重复触发某一个行为(事件时),只执行最后一次触发
|
129
|
-
* @param fn 防抖函数
|
130
|
-
* @param interval 间隔时间段
|
131
|
-
* @returns
|
132
|
-
*/
|
133
|
-
export function debounce(fn, interval = 500) {
|
134
|
-
let _t = -1;
|
135
|
-
return (...args) => {
|
136
|
-
clearTimeout(_t);
|
137
|
-
_t = setTimeout(() => {
|
138
|
-
fn(...args);
|
139
|
-
}, interval);
|
140
|
-
};
|
141
|
-
}
|
1
|
+
/**
|
2
|
+
* web(浏览器) 端工具类
|
3
|
+
*/
|
4
|
+
import { isBlank } from './index';
|
5
|
+
/**
|
6
|
+
* 解析 Form 表单中的 input 元素的数据为 JSON 格式,key: input-name;value: input-value
|
7
|
+
* @param form {object} Form 节点对象
|
8
|
+
*/
|
9
|
+
export const formJson = function (form) {
|
10
|
+
let elems = form.elements;
|
11
|
+
let value = {};
|
12
|
+
for (let i = 0, len = elems.length; i < len; i++) {
|
13
|
+
let item = elems[i];
|
14
|
+
if (!isBlank(item.name)) {
|
15
|
+
if ((item.tagName === 'INPUT' || item.tagName === 'TEXTAREA') && !isBlank(item.value)) {
|
16
|
+
let dataType = item.getAttribute('data-type');
|
17
|
+
if (dataType === 'number') {
|
18
|
+
value[item.name] = Number(item.value);
|
19
|
+
}
|
20
|
+
else {
|
21
|
+
value[item.name] = item.value;
|
22
|
+
}
|
23
|
+
}
|
24
|
+
else if (item.tagName === 'SELECT') {
|
25
|
+
value[item.name] = item.options[item.selectedIndex].value;
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
return value;
|
30
|
+
};
|
31
|
+
/**
|
32
|
+
* 获取 url query 参数 (get 请求的参数)
|
33
|
+
* @param search 如果是 React 应用就需要传递 useLocation().search
|
34
|
+
* @returns
|
35
|
+
*/
|
36
|
+
export function query(search) {
|
37
|
+
if (isBlank(search)) {
|
38
|
+
search = location.search;
|
39
|
+
}
|
40
|
+
const searchParams = new URLSearchParams(search);
|
41
|
+
let query = {};
|
42
|
+
for (const [key, value] of searchParams) {
|
43
|
+
let oldValue = query[key];
|
44
|
+
let newValue = value;
|
45
|
+
if (oldValue != null) {
|
46
|
+
if (oldValue instanceof Array) {
|
47
|
+
oldValue.push(value);
|
48
|
+
newValue = oldValue;
|
49
|
+
}
|
50
|
+
else {
|
51
|
+
newValue = [value, oldValue];
|
52
|
+
}
|
53
|
+
}
|
54
|
+
query[key] = newValue;
|
55
|
+
}
|
56
|
+
return query;
|
57
|
+
}
|
package/package.json
CHANGED
@@ -2,10 +2,11 @@
|
|
2
2
|
"name": "ph-utils",
|
3
3
|
"description": "js 开发工具集,前后端都可以使用(commonjs和es module)",
|
4
4
|
"main": "lib/index.js",
|
5
|
-
"module": "lib/
|
5
|
+
"module": "lib/index.js",
|
6
6
|
"types": "lib/index.d.ts",
|
7
|
-
"browser": "lib/
|
8
|
-
"version": "0.
|
7
|
+
"browser": "lib/index.js",
|
8
|
+
"version": "0.3.0",
|
9
|
+
"type": "module",
|
9
10
|
"repository": {
|
10
11
|
"type": "git",
|
11
12
|
"url": "git+https//gitee.com/towardly/ph.git",
|
@@ -18,11 +19,8 @@
|
|
18
19
|
},
|
19
20
|
"homepage": "https://gitee.com/towardly/ph/tree/master/packages/utils",
|
20
21
|
"devDependencies": {
|
21
|
-
"@types/node": "^
|
22
|
-
"typescript": "
|
23
|
-
},
|
24
|
-
"scripts": {
|
25
|
-
"build": "node scripts/build.js"
|
22
|
+
"@types/node": "^20.3.1",
|
23
|
+
"typescript": "^5.1.3"
|
26
24
|
},
|
27
25
|
"files": [
|
28
26
|
"lib"
|
@@ -34,5 +32,8 @@
|
|
34
32
|
"date",
|
35
33
|
"dom",
|
36
34
|
"file"
|
37
|
-
]
|
35
|
+
],
|
36
|
+
"scripts": {
|
37
|
+
"build": "node scripts/build.js"
|
38
|
+
}
|
38
39
|
}
|
package/lib/date_m.d.ts
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* 将日期格式化为指定形式的字符串
|
3
|
-
* @param date 日期
|
4
|
-
* @param pattern 格式化字符串 yyyy - 年, mm - 月, dd - 日, HH - 小时, MM - 分钟, ss - 秒
|
5
|
-
*/
|
6
|
-
export declare function format(date?: Date | string | number, pattern?: string): string;
|
7
|
-
/**
|
8
|
-
* 将指定的参数解析为日期对象(Date)
|
9
|
-
* 参考 dayjs 实现, 也可以参考 https://github.com/nomiddlename/date-format
|
10
|
-
* @param date 待解析的日期参数
|
11
|
-
*/
|
12
|
-
export declare function parse(date?: Date | string | number): Date;
|
13
|
-
/**
|
14
|
-
* 设置日期的开始或者结束的点
|
15
|
-
* @param {Object} date 日期,能够被 parse 解析的日期
|
16
|
-
* @param {String} unit 单位,H Hours, 默认为 H
|
17
|
-
* @param {Boolean} isEnd true则为 endOf
|
18
|
-
*/
|
19
|
-
export declare function startOf(date?: Date | string | number, unit?: string, isEnd?: boolean): Date;
|
20
|
-
/**
|
21
|
-
* 日期加上指定时间后的日期
|
22
|
-
* @param date 指定的日期
|
23
|
-
* @param num 需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
|
24
|
-
* @param unit 需要添加的单位,date - 加减天数
|
25
|
-
*/
|
26
|
-
export declare function add(date: Date | string | number | null, num: number, unit: string): Date;
|
27
|
-
/**
|
28
|
-
* 日期加上指定时间后的日期
|
29
|
-
* @param date 指定的日期, 传递为 null ,则表示为当前日期
|
30
|
-
* @param num 需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
|
31
|
-
* @param unit 需要添加的单位,date - 加减天数
|
32
|
-
* @param fmt 如果传递了格式化的单位,则返回格式化后的日期, 格式化字符串 yyyy - 年, mm - 月, dd - 日, HH - 小时, MM - 分钟, ss - 秒
|
33
|
-
*/
|
34
|
-
export declare function add(date: Date | string | number | null, num: number, unit: string, fmt: string): string;
|
package/lib/date_m.js
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* node 和 web 端日期处理工具类
|
3
|
-
*/
|
4
|
-
// 配置日期格式的正则表达式
|
5
|
-
const REGEX_FORMAT = /yy(?:yy)?|([HMmds])\1?/g;
|
6
|
-
// 由于 Date.parse() 不能正确解析 yyyy-dd-mm 格式的日期, 所以匹配手动解析
|
7
|
-
const REGEX_PARSE = /^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/;
|
8
|
-
/**
|
9
|
-
* 不足位数, 前位补 0
|
10
|
-
* @param s 日期数字
|
11
|
-
* @param l 截取位数
|
12
|
-
* @returns {string} 补0后的日期数字
|
13
|
-
*/
|
14
|
-
function p(s, l = 2) {
|
15
|
-
/*
|
16
|
-
* 由于年份最多为4为,所以前面先添3个0
|
17
|
-
* slice() 从后开始提前字符串
|
18
|
-
*/
|
19
|
-
return ('000' + s).slice(l * -1);
|
20
|
-
}
|
21
|
-
function getUnit(unit) {
|
22
|
-
return unit.substring(0, 1).toUpperCase() + unit.substring(1);
|
23
|
-
}
|
24
|
-
/**
|
25
|
-
* 将日期格式化为指定形式的字符串
|
26
|
-
* @param date 日期
|
27
|
-
* @param pattern 格式化字符串 yyyy - 年, mm - 月, dd - 日, HH - 小时, MM - 分钟, ss - 秒
|
28
|
-
*/
|
29
|
-
export function format(date, pattern = 'yyyy-mm-dd HH:MM') {
|
30
|
-
date = parse(date);
|
31
|
-
let d = date.getDate();
|
32
|
-
let y = date.getFullYear();
|
33
|
-
let m = date.getMonth();
|
34
|
-
let H = date.getHours();
|
35
|
-
let M = date.getMinutes();
|
36
|
-
let s = date.getSeconds();
|
37
|
-
let flags = {
|
38
|
-
yy: p(y),
|
39
|
-
yyyy: y,
|
40
|
-
m: m + 1,
|
41
|
-
mm: p(m + 1),
|
42
|
-
d: d,
|
43
|
-
dd: p(d),
|
44
|
-
H: H,
|
45
|
-
HH: p(H),
|
46
|
-
M: M,
|
47
|
-
MM: p(M),
|
48
|
-
s: s,
|
49
|
-
ss: p(s),
|
50
|
-
};
|
51
|
-
if (pattern != null) {
|
52
|
-
return pattern.replace(REGEX_FORMAT, (flag) => {
|
53
|
-
if (flag in flags) {
|
54
|
-
return flags[flag];
|
55
|
-
}
|
56
|
-
return flag;
|
57
|
-
});
|
58
|
-
}
|
59
|
-
return String(date.getTime());
|
60
|
-
}
|
61
|
-
/**
|
62
|
-
* 将指定的参数解析为日期对象(Date)
|
63
|
-
* 参考 dayjs 实现, 也可以参考 https://github.com/nomiddlename/date-format
|
64
|
-
* @param date 待解析的日期参数
|
65
|
-
*/
|
66
|
-
export function parse(date) {
|
67
|
-
if (date == null)
|
68
|
-
return new Date();
|
69
|
-
if (date instanceof Date)
|
70
|
-
return date;
|
71
|
-
if (typeof date === 'string' && !/Z$/i.test(date)) {
|
72
|
-
const d = date.match(REGEX_PARSE);
|
73
|
-
if (d) {
|
74
|
-
return new Date(d[1], d[2] - 1, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, d[7] || 0);
|
75
|
-
}
|
76
|
-
}
|
77
|
-
return new Date(date);
|
78
|
-
}
|
79
|
-
/**
|
80
|
-
* 设置日期的开始或者结束的点
|
81
|
-
* @param {Object} date 日期,能够被 parse 解析的日期
|
82
|
-
* @param {String} unit 单位,H Hours, 默认为 H
|
83
|
-
* @param {Boolean} isEnd true则为 endOf
|
84
|
-
*/
|
85
|
-
export function startOf(date, unit, isEnd = false) {
|
86
|
-
const argumentStart = [0, 0, 0, 0];
|
87
|
-
const argumentEnd = [23, 59, 59, 999];
|
88
|
-
date = parse(date);
|
89
|
-
let u = getUnit(unit || 'Hours');
|
90
|
-
let fn = 'set' + u;
|
91
|
-
let args = isEnd === true ? argumentEnd : argumentStart;
|
92
|
-
Date.prototype[fn].apply(date, args);
|
93
|
-
return date;
|
94
|
-
}
|
95
|
-
/**
|
96
|
-
* 日期加上指定时间后的日期
|
97
|
-
* @param date 指定的日期
|
98
|
-
* @param num 需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
|
99
|
-
* @param unit 需要添加的单位,date - 加减天数
|
100
|
-
* @param fmt 可选参数,如果传递了格式化的单位,则返回格式化后的日期, 格式化字符串 yyyy - 年, mm - 月, dd - 日, HH - 小时, MM - 分钟, ss - 秒
|
101
|
-
* @returns {Date | string} 如果传递了 fmt 参数,则返回 string,否则返回 Date
|
102
|
-
*/
|
103
|
-
export function add(date, num, unit, fmt) {
|
104
|
-
let sdate = new Date();
|
105
|
-
if (date != null) {
|
106
|
-
sdate = parse(date);
|
107
|
-
}
|
108
|
-
unit = getUnit(unit);
|
109
|
-
let fn = 'set' + unit;
|
110
|
-
let gn = 'get' + unit;
|
111
|
-
let oldValue = Date.prototype[gn].apply(sdate);
|
112
|
-
Date.prototype[fn].apply(sdate, [oldValue + num]);
|
113
|
-
if (typeof fmt === 'string') {
|
114
|
-
return format(sdate, fmt);
|
115
|
-
}
|
116
|
-
else {
|
117
|
-
return sdate;
|
118
|
-
}
|
119
|
-
}
|
package/lib/index_m.d.ts
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* node 和 web 通用的工具类
|
3
|
-
*/
|
4
|
-
/**
|
5
|
-
* 验证字符串是否为空
|
6
|
-
* @param str 待验证的字符串
|
7
|
-
* @param ignoreWhitespace 是否忽略空格(包括空白字符串以及[\r\t\n]之类的制表符),默认为true
|
8
|
-
*/
|
9
|
-
export declare function isBlank(str?: string | null, ignoreWhitespace?: boolean): boolean;
|
10
|
-
/**
|
11
|
-
* 屏蔽手机号,中间部分用 * 展示
|
12
|
-
* @param mobile 待屏蔽的手机号
|
13
|
-
* @returns 屏蔽后的手机号,例如:123 **** 1234
|
14
|
-
*/
|
15
|
-
export declare function shieldMobile(mobile: string): string;
|
16
|
-
/**
|
17
|
-
* 验证参数是否是数字
|
18
|
-
* @param str 待验证的字符串
|
19
|
-
* @param numericParam 通过参数标记是否包含小数、正数
|
20
|
-
* @param numericParam.isPositive 是否是正数
|
21
|
-
* @param numericParam.isFloat 是否是小数
|
22
|
-
* @returns true 是数字, false 不是数字
|
23
|
-
*/
|
24
|
-
export declare function isNumeric(str: string, numericParam?: {
|
25
|
-
isPositive?: boolean;
|
26
|
-
isFloat?: boolean;
|
27
|
-
}): boolean;
|
28
|
-
/**
|
29
|
-
* 验证参数是否是Boolean 类型
|
30
|
-
* @param str 待验证的字符串
|
31
|
-
* @returns
|
32
|
-
*/
|
33
|
-
export declare function isBoolean(str: string): boolean;
|
34
|
-
/**
|
35
|
-
* 带有错误名称标记的错误类型
|
36
|
-
*/
|
37
|
-
export declare class BaseError extends Error {
|
38
|
-
/**
|
39
|
-
* 错误名称,类似于 Java 中的不同的 Exception[NullPointerException];
|
40
|
-
* 增加 name 字段,表明不同的错误,当需要根据不同的错误执行不同的处理的时候,会很有用
|
41
|
-
*/
|
42
|
-
name: string;
|
43
|
-
/**
|
44
|
-
* 构造一个 name = BaseError 的错误信息
|
45
|
-
* @param message 错误描述
|
46
|
-
*/
|
47
|
-
constructor(message: string);
|
48
|
-
/**
|
49
|
-
*
|
50
|
-
* @param name 错误名称
|
51
|
-
* @param message 错误描述
|
52
|
-
*/
|
53
|
-
constructor(name: string, message: string);
|
54
|
-
}
|
55
|
-
/**
|
56
|
-
* 创建一个节流函数,在 wait 秒内最多执行 func 一次的函数。
|
57
|
-
* @param func 要节流的函数
|
58
|
-
* @param wait 需要节流的毫秒
|
59
|
-
* @returns
|
60
|
-
*/
|
61
|
-
export declare function throttle<T extends (...args: any) => any>(func: T, wait?: number): (...args: any[]) => void;
|
package/lib/index_m.js
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* node 和 web 通用的工具类
|
3
|
-
*/
|
4
|
-
/**
|
5
|
-
* 验证字符串是否为空
|
6
|
-
* @param str 待验证的字符串
|
7
|
-
* @param ignoreWhitespace 是否忽略空格(包括空白字符串以及[\r\t\n]之类的制表符),默认为true
|
8
|
-
*/
|
9
|
-
export function isBlank(str, ignoreWhitespace = true) {
|
10
|
-
if (str == null) {
|
11
|
-
return true;
|
12
|
-
}
|
13
|
-
return (ignoreWhitespace ? str.trim().length : str.length) === 0;
|
14
|
-
}
|
15
|
-
/**
|
16
|
-
* 屏蔽手机号,中间部分用 * 展示
|
17
|
-
* @param mobile 待屏蔽的手机号
|
18
|
-
* @returns 屏蔽后的手机号,例如:123 **** 1234
|
19
|
-
*/
|
20
|
-
export function shieldMobile(mobile) {
|
21
|
-
let x1 = Math.floor(mobile.length / 2);
|
22
|
-
let x2 = Math.ceil(x1 / 2);
|
23
|
-
let shields = [' '];
|
24
|
-
for (let i = 0; i < x1 - 1; i++) {
|
25
|
-
shields.push('*');
|
26
|
-
}
|
27
|
-
shields.push(' ');
|
28
|
-
return (mobile.substring(0, x2) + shields.join('') + mobile.substring(x2 + x1 - 1));
|
29
|
-
}
|
30
|
-
/**
|
31
|
-
* 验证参数是否是数字
|
32
|
-
* @param str 待验证的字符串
|
33
|
-
* @param numericParam 通过参数标记是否包含小数、正数
|
34
|
-
* @param numericParam.isPositive 是否是正数
|
35
|
-
* @param numericParam.isFloat 是否是小数
|
36
|
-
* @returns true 是数字, false 不是数字
|
37
|
-
*/
|
38
|
-
export function isNumeric(str, numericParam) {
|
39
|
-
numericParam = { isPositive: false, isFloat: true, ...(numericParam || {}) };
|
40
|
-
let symbol = numericParam.isPositive ? '[+]?' : '[+-]?';
|
41
|
-
let main = numericParam.isFloat ? '([0-9]*[.])?[0-9]+' : '[0-9]+';
|
42
|
-
return new RegExp('^' + symbol + main + '$').test(str);
|
43
|
-
}
|
44
|
-
/**
|
45
|
-
* 验证参数是否是Boolean 类型
|
46
|
-
* @param str 待验证的字符串
|
47
|
-
* @returns
|
48
|
-
*/
|
49
|
-
export function isBoolean(str) {
|
50
|
-
return ['true', 'false'].indexOf(str) >= 0;
|
51
|
-
}
|
52
|
-
/**
|
53
|
-
* 带有错误名称标记的错误类型
|
54
|
-
*/
|
55
|
-
export class BaseError extends Error {
|
56
|
-
constructor() {
|
57
|
-
if (arguments.length === 1) {
|
58
|
-
super(arguments[0]);
|
59
|
-
this.name = 'BaseError';
|
60
|
-
}
|
61
|
-
else {
|
62
|
-
super(arguments[1]);
|
63
|
-
this.name = arguments[0];
|
64
|
-
}
|
65
|
-
}
|
66
|
-
}
|
67
|
-
/**
|
68
|
-
* 创建一个节流函数,在 wait 秒内最多执行 func 一次的函数。
|
69
|
-
* @param func 要节流的函数
|
70
|
-
* @param wait 需要节流的毫秒
|
71
|
-
* @returns
|
72
|
-
*/
|
73
|
-
export function throttle(func, wait = 300) {
|
74
|
-
let t = -1;
|
75
|
-
return function (...args) {
|
76
|
-
const self = this;
|
77
|
-
clearTimeout(t);
|
78
|
-
t = setTimeout(() => {
|
79
|
-
func.apply(self, args);
|
80
|
-
}, wait);
|
81
|
-
};
|
82
|
-
}
|
package/lib/validator_m.d.ts
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* 数据验证器
|
3
|
-
*/
|
4
|
-
interface RuleItem {
|
5
|
-
rule: RegExp | ((v: any) => boolean) | 'required';
|
6
|
-
message: string;
|
7
|
-
sameKey?: string;
|
8
|
-
}
|
9
|
-
export declare type RuleType = string | RegExp | ((v: any) => boolean) | (RegExp | string | ((v: any) => boolean) | {
|
10
|
-
rule: string | RegExp | ((v: any) => boolean);
|
11
|
-
message?: string;
|
12
|
-
});
|
13
|
-
export interface SchemaType {
|
14
|
-
key: string;
|
15
|
-
required?: boolean;
|
16
|
-
type?: string | ((v: any) => void);
|
17
|
-
rules: RuleType[];
|
18
|
-
message?: string;
|
19
|
-
}
|
20
|
-
/**
|
21
|
-
* 数据验证器,除了进行数据验证外,还可以同时进行数据转化
|
22
|
-
*/
|
23
|
-
declare class Validator {
|
24
|
-
rules: {
|
25
|
-
[index: string]: RuleItem[];
|
26
|
-
};
|
27
|
-
/**
|
28
|
-
* 构造数据验证转换器
|
29
|
-
* @param schemas 配置验证转换规则
|
30
|
-
*/
|
31
|
-
constructor(schemas: SchemaType[]);
|
32
|
-
/**
|
33
|
-
* 进行数据验证
|
34
|
-
* @param data 待验证的数据
|
35
|
-
* @returns
|
36
|
-
*/
|
37
|
-
validate(data: any): Promise<boolean>;
|
38
|
-
/**
|
39
|
-
* 只验证指定 key 的数据格式
|
40
|
-
* @param key 指定待验证的 key
|
41
|
-
* @param value 待验证的数据
|
42
|
-
*/
|
43
|
-
validateKey(key: string, value: any, data?: any): Promise<boolean>;
|
44
|
-
private _validateRule;
|
45
|
-
private _parseStringRule;
|
46
|
-
}
|
47
|
-
export default Validator;
|