hy-app 0.5.9 → 0.5.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/hy-action-sheet/hy-action-sheet.vue +200 -200
- package/components/hy-action-sheet/props.ts +71 -71
- package/components/hy-action-sheet/typing.d.ts +64 -64
- package/components/hy-address-picker/hy-address-picker.vue +1 -1
- package/components/hy-address-picker/props.ts +100 -100
- package/components/hy-address-picker/typing.d.ts +16 -16
- package/components/hy-avatar/hy-avatar.vue +163 -163
- package/components/hy-avatar/props.ts +78 -78
- package/components/hy-avatar/typing.d.ts +4 -4
- package/components/hy-back-top/hy-back-top.vue +90 -90
- package/components/hy-back-top/props.ts +60 -60
- package/components/hy-back-top/typing.d.ts +4 -4
- package/components/hy-badge/hy-badge.vue +97 -97
- package/components/hy-badge/props.ts +82 -82
- package/components/hy-badge/typing.d.ts +9 -9
- package/components/hy-button/hy-button.vue +275 -275
- package/components/hy-button/props.ts +135 -135
- package/components/hy-button/typing.d.ts +30 -30
- package/components/hy-calendar/header.vue +60 -60
- package/components/hy-calendar/hy-calendar.vue +362 -362
- package/components/hy-calendar/month.vue +537 -537
- package/components/hy-calendar/props.ts +159 -159
- package/components/hy-calendar/typing.d.ts +6 -6
- package/components/hy-card/hy-card.vue +161 -161
- package/components/hy-card/props.ts +122 -122
- package/components/hy-card/typing.d.ts +12 -12
- package/components/hy-cell/hy-cell.vue +33 -33
- package/components/hy-cell/props.ts +54 -54
- package/components/hy-cell/typing.d.ts +4 -4
- package/components/hy-cell-item/hy-cell-item.vue +161 -161
- package/components/hy-cell-item/props.ts +66 -66
- package/components/hy-cell-item/typing.d.ts +7 -7
- package/components/hy-check-button/hy-check-button.vue +96 -96
- package/components/hy-check-button/props.ts +74 -74
- package/components/hy-check-button/typing.d.ts +44 -44
- package/components/hy-checkbox/hy-checkbox.vue +227 -227
- package/components/hy-checkbox/props.ts +96 -96
- package/components/hy-checkbox/typing.d.ts +8 -8
- package/components/hy-checkbox-group/hy-checkbox-group.vue +45 -45
- package/components/hy-checkbox-group/props.ts +80 -80
- package/components/hy-checkbox-group/typing.d.ts +6 -6
- package/components/hy-checkbox-item/hy-checkbox-item.vue +199 -199
- package/components/hy-checkbox-item/props.ts +24 -24
- package/components/hy-checkbox-item/typing.d.ts +7 -7
- package/components/hy-code-input/hy-code-input.vue +231 -231
- package/components/hy-code-input/props.ts +88 -88
- package/components/hy-code-input/typing.d.ts +8 -8
- package/components/hy-config-provider/hy-config-provider.vue +53 -53
- package/components/hy-config-provider/props.ts +28 -28
- package/components/hy-count-down/hy-count-down.vue +170 -170
- package/components/hy-count-down/index.ts +52 -52
- package/components/hy-count-down/props.ts +32 -32
- package/components/hy-count-down/typing.d.ts +14 -14
- package/components/hy-count-to/hy-count-to.vue +218 -218
- package/components/hy-count-to/props.ts +62 -62
- package/components/hy-count-to/typing.d.ts +4 -4
- package/components/hy-coupon/hy-coupon.vue +172 -172
- package/components/hy-coupon/index.scss +171 -171
- package/components/hy-coupon/props.ts +103 -103
- package/components/hy-coupon/typing.d.ts +14 -14
- package/components/hy-datetime-picker/hy-datetime-picker.vue +521 -521
- package/components/hy-datetime-picker/props.ts +142 -142
- package/components/hy-datetime-picker/typing.d.ts +20 -20
- package/components/hy-divider/hy-divider.vue +132 -132
- package/components/hy-divider/props.ts +80 -80
- package/components/hy-dropdown/hy-dropdown.vue +60 -60
- package/components/hy-dropdown/props.ts +40 -40
- package/components/hy-dropdown-item/hy-dropdown-item.vue +206 -206
- package/components/hy-dropdown-item/props.ts +21 -21
- package/components/hy-dropdown-item/typing.d.ts +17 -17
- package/components/hy-empty/hy-empty.vue +116 -116
- package/components/hy-empty/icon.ts +72 -72
- package/components/hy-empty/props.ts +60 -60
- package/components/hy-empty/typing.d.ts +38 -38
- package/components/hy-flex/hy-flex.vue +53 -53
- package/components/hy-flex/index.scss +8 -8
- package/components/hy-flex/props.ts +58 -58
- package/components/hy-flex/typing.d.ts +21 -21
- package/components/hy-float-button/hy-float-button.vue +378 -378
- package/components/hy-float-button/props.ts +111 -111
- package/components/hy-float-button/typing.d.ts +35 -35
- package/components/hy-folding-panel/hy-folding-panel.vue +109 -109
- package/components/hy-folding-panel/props.ts +42 -42
- package/components/hy-folding-panel/typing.d.ts +19 -19
- package/components/hy-folding-panel-item/hy-folding-panel-item.vue +183 -183
- package/components/hy-folding-panel-item/props.ts +81 -81
- package/components/hy-folding-panel-item/typing.d.ts +37 -37
- package/components/hy-form/hy-form.vue +220 -220
- package/components/hy-form/props.ts +37 -37
- package/components/hy-form/typing.d.ts +41 -41
- package/components/hy-form-group/hy-form-group.vue +333 -333
- package/components/hy-form-group/props.ts +105 -105
- package/components/hy-form-item/hy-form-item.vue +176 -176
- package/components/hy-form-item/index.scss +0 -1
- package/components/hy-form-item/props.ts +25 -25
- package/components/hy-form-item/typing.d.ts +30 -30
- package/components/hy-grid/hy-grid.vue +109 -109
- package/components/hy-grid/props.ts +60 -60
- package/components/hy-grid/typing.d.ts +35 -35
- package/components/hy-icon/hy-icon.vue +112 -112
- package/components/hy-icon/index.scss +0 -3
- package/components/hy-icon/props.ts +79 -79
- package/components/hy-icon/typing.d.ts +9 -9
- package/components/hy-image/hy-image.vue +192 -192
- package/components/hy-image/props.ts +107 -107
- package/components/hy-image/typing.d.ts +10 -10
- package/components/hy-input/hy-input.vue +333 -333
- package/components/hy-input/index.scss +5 -0
- package/components/hy-input/props.ts +186 -186
- package/components/hy-input/typing.d.ts +31 -31
- package/components/hy-line/hy-line.vue +55 -55
- package/components/hy-line/props.ts +43 -43
- package/components/hy-line-progress/hy-line-progress.vue +102 -102
- package/components/hy-line-progress/index.scss +1 -0
- package/components/hy-line-progress/props.ts +33 -33
- package/components/hy-list/hy-list.vue +226 -226
- package/components/hy-list/props.ts +69 -69
- package/components/hy-list/typing.d.ts +6 -6
- package/components/hy-loading/hy-loading.vue +107 -107
- package/components/hy-loading/props.ts +65 -65
- package/components/hy-menu/hy-menu.vue +159 -159
- package/components/hy-menu/props.ts +44 -44
- package/components/hy-menu/typing.d.ts +34 -34
- package/components/hy-modal/hy-modal.vue +173 -173
- package/components/hy-modal/props.ts +90 -90
- package/components/hy-modal/typing.d.ts +11 -11
- package/components/hy-navbar/hy-navbar.vue +144 -144
- package/components/hy-navbar/props.ts +78 -78
- package/components/hy-navbar/typing.d.ts +6 -6
- package/components/hy-notice-bar/hy-column-notice.vue +94 -94
- package/components/hy-notice-bar/hy-notice-bar.vue +96 -96
- package/components/hy-notice-bar/hy-row-notice.vue +121 -121
- package/components/hy-notice-bar/props.ts +85 -85
- package/components/hy-notice-bar/typing.d.ts +8 -8
- package/components/hy-notify/hy-notify.vue +174 -174
- package/components/hy-notify/props.ts +51 -51
- package/components/hy-number-step/hy-number-step.vue +367 -367
- package/components/hy-number-step/props.ts +112 -112
- package/components/hy-number-step/typing.d.ts +16 -16
- package/components/hy-overlay/hy-overlay.vue +60 -60
- package/components/hy-overlay/props.ts +33 -33
- package/components/hy-overlay/typing.d.ts +4 -4
- package/components/hy-pagination/hy-pagination.vue +135 -135
- package/components/hy-pagination/props.ts +55 -55
- package/components/hy-pagination/typing.d.ts +10 -10
- package/components/hy-picker/hy-picker.vue +7 -5
- package/components/hy-picker/props.ts +7 -2
- package/components/hy-picker/typing.d.ts +9 -5
- package/components/hy-popover/hy-popover.vue +251 -251
- package/components/hy-popover/props.ts +51 -51
- package/components/hy-popover/typing.d.ts +39 -39
- package/components/hy-popup/hy-popup.vue +197 -197
- package/components/hy-popup/props.ts +85 -85
- package/components/hy-popup/typing.d.ts +10 -10
- package/components/hy-price/hy-price.vue +79 -79
- package/components/hy-price/props.ts +54 -54
- package/components/hy-price/typing.d.ts +4 -4
- package/components/hy-qrcode/hy-qrcode.vue +216 -216
- package/components/hy-qrcode/props.ts +70 -70
- package/components/hy-qrcode/qrcode.js +1304 -1304
- package/components/hy-qrcode/typing.d.ts +8 -8
- package/components/hy-radio/hy-radio.vue +226 -226
- package/components/hy-radio/props.ts +1 -1
- package/components/hy-radio/typing.d.ts +8 -8
- package/components/hy-rate/hy-rate.vue +239 -239
- package/components/hy-rate/props.ts +77 -77
- package/components/hy-rate/typing.d.ts +6 -6
- package/components/hy-read-more/hy-read-more.vue +130 -130
- package/components/hy-read-more/props.ts +45 -45
- package/components/hy-read-more/typing.d.ts +6 -6
- package/components/hy-rolling-num/hy-rolling-num.vue +188 -188
- package/components/hy-rolling-num/props.ts +68 -68
- package/components/hy-scroll-list/hy-scroll-list.vue +123 -123
- package/components/hy-scroll-list/props.ts +22 -22
- package/components/hy-scroll-list/typing.d.ts +6 -6
- package/components/hy-search/hy-search.vue +221 -221
- package/components/hy-search/props.ts +131 -131
- package/components/hy-search/typing.d.ts +22 -22
- package/components/hy-signature/hy-signature.vue +640 -640
- package/components/hy-signature/props.ts +118 -118
- package/components/hy-signature/typing.d.ts +93 -93
- package/components/hy-slider/hy-slider.vue +444 -444
- package/components/hy-slider/props.ts +77 -77
- package/components/hy-slider/typing.d.ts +10 -10
- package/components/hy-status-bar/hy-status-bar.vue +41 -41
- package/components/hy-status-bar/props.ts +8 -8
- package/components/hy-status-bar/typing.d.ts +12 -12
- package/components/hy-steps/hy-steps.vue +267 -267
- package/components/hy-steps/props.ts +49 -49
- package/components/hy-steps/typing.d.ts +21 -21
- package/components/hy-sticky/hy-sticky.vue +226 -226
- package/components/hy-sticky/props.ts +24 -24
- package/components/hy-sticky/typing.d.ts +4 -4
- package/components/hy-submit-bar/hy-submit-bar.vue +189 -189
- package/components/hy-submit-bar/props.ts +91 -91
- package/components/hy-submit-bar/typing.d.ts +24 -24
- package/components/hy-subsection/hy-subsection.vue +207 -207
- package/components/hy-subsection/props.ts +52 -52
- package/components/hy-subsection/typing.d.ts +13 -13
- package/components/hy-swipe-action/hy-swipe-action.vue +323 -323
- package/components/hy-swipe-action/index.ts +25 -25
- package/components/hy-swipe-action/props.ts +47 -47
- package/components/hy-swipe-action/typing.d.ts +25 -25
- package/components/hy-swiper/hy-swiper-indicator.vue +75 -75
- package/components/hy-swiper/hy-swiper.vue +224 -224
- package/components/hy-swiper/props.ts +128 -128
- package/components/hy-swiper/typing.d.ts +26 -26
- package/components/hy-switch/hy-switch.vue +173 -173
- package/components/hy-switch/props.ts +61 -61
- package/components/hy-switch/typing.d.ts +8 -8
- package/components/hy-tabbar/hy-tabbar.vue +136 -136
- package/components/hy-tabbar/props.ts +59 -59
- package/components/hy-tabbar/typing.d.ts +21 -21
- package/components/hy-tabbar-group/hy-tabbar-group.vue +87 -87
- package/components/hy-tabbar-group/props.ts +78 -78
- package/components/hy-tabbar-group/typing.d.ts +16 -16
- package/components/hy-tabbar-item/hy-tabbar-item.vue +103 -103
- package/components/hy-tabbar-item/typing.d.ts +10 -10
- package/components/hy-table/hy-table.vue +358 -358
- package/components/hy-table/props.ts +47 -47
- package/components/hy-table/typing.d.ts +34 -34
- package/components/hy-tabs/hy-tabs.vue +335 -335
- package/components/hy-tabs/props.ts +77 -77
- package/components/hy-tabs/typing.d.ts +33 -33
- package/components/hy-tag/hy-tag.vue +174 -174
- package/components/hy-tag/props.ts +89 -89
- package/components/hy-tag/typing.d.ts +13 -13
- package/components/hy-text/hy-text.vue +237 -237
- package/components/hy-text/props.ts +115 -115
- package/components/hy-text/typing.d.ts +6 -6
- package/components/hy-textarea/hy-textarea.vue +197 -197
- package/components/hy-textarea/index.scss +5 -0
- package/components/hy-textarea/props.ts +116 -116
- package/components/hy-textarea/typing.d.ts +22 -22
- package/components/hy-toast/hy-toast.vue +190 -190
- package/components/hy-toast/typing.d.ts +38 -38
- package/components/hy-tooltip/hy-tooltip.vue +277 -277
- package/components/hy-tooltip/props.ts +78 -78
- package/components/hy-tooltip/typing.d.ts +4 -4
- package/components/hy-transition/hy-transition.vue +157 -157
- package/components/hy-transition/props.ts +32 -32
- package/components/hy-transition/typing.d.ts +16 -16
- package/components/hy-upload/hy-upload.vue +385 -385
- package/components/hy-upload/props.ts +132 -132
- package/components/hy-upload/typing.d.ts +65 -65
- package/components/hy-warn/hy-warn.vue +115 -115
- package/components/hy-warn/props.ts +49 -49
- package/components/hy-warn/typing.d.ts +6 -6
- package/components/hy-waterfall/hy-waterfall.vue +191 -191
- package/components/hy-waterfall/props.ts +21 -21
- package/components/hy-watermark/hy-watermark.vue +978 -978
- package/components/hy-watermark/props.ts +104 -104
- package/components/index.ts +183 -183
- package/global.d.ts +91 -91
- package/index.ts +1 -1
- package/libs/api/http.ts +140 -140
- package/libs/api/index.ts +1 -1
- package/libs/common/index.ts +2 -2
- package/libs/common/queue.ts +28 -28
- package/libs/composables/index.ts +6 -6
- package/libs/composables/usePopover.ts +241 -241
- package/libs/composables/useQueue.ts +53 -53
- package/libs/composables/useShakeService.ts +64 -64
- package/libs/composables/useShare.ts +42 -42
- package/libs/composables/useToast.ts +45 -45
- package/libs/composables/useTouch.ts +51 -51
- package/libs/config/color.ts +7 -7
- package/libs/config/icon.ts +430 -430
- package/libs/config/index.ts +2 -2
- package/libs/css/iconfont.css +443 -443
- package/libs/css/theme.scss +1 -1
- package/libs/global/index.ts +6 -6
- package/libs/global/register-properties.ts +37 -37
- package/libs/index.ts +7 -7
- package/libs/typing/index.ts +4 -4
- package/libs/typing/modules/common.d.ts +139 -139
- package/libs/typing/modules/enum.ts +67 -67
- package/libs/typing/modules/form.ts +5 -1
- package/libs/typing/modules/http.ts +17 -17
- package/libs/typing/modules/icon.d.ts +366 -366
- package/libs/typing/modules/rect.ts +10 -10
- package/libs/utils/base64.ts +119 -119
- package/libs/utils/calendar.js +1021 -1021
- package/libs/utils/colorGradient.ts +112 -112
- package/libs/utils/index.ts +5 -5
- package/libs/utils/inside.ts +350 -361
- package/libs/utils/inspect.ts +171 -171
- package/libs/utils/utils.ts +521 -521
- package/package.json +18 -18
- package/web-types.json +1 -1
package/libs/utils/inspect.ts
CHANGED
|
@@ -1,171 +1,171 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @description 判断字符串是否是数字
|
|
3
|
-
* @param {String | Number} text 值
|
|
4
|
-
* @return {Boolean}
|
|
5
|
-
* */
|
|
6
|
-
export const isNumericString = (text: string | number): boolean => {
|
|
7
|
-
return typeof text === "string" && !isNaN(Number(text));
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @description 判断是否是数字
|
|
12
|
-
* @param {String | Number} text 值
|
|
13
|
-
* @return {Boolean}
|
|
14
|
-
* */
|
|
15
|
-
export const isNumber = (text: string | number): boolean => {
|
|
16
|
-
return typeof text === "number" || isNumericString(text);
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @description 判断是否数组
|
|
21
|
-
* @param {any} arr 传入数组值
|
|
22
|
-
* @return {Boolean}
|
|
23
|
-
*/
|
|
24
|
-
export const isArray = (arr: any): arr is Array<any> => {
|
|
25
|
-
// 如果 Array.isArray 函数可用,直接使用该函数检查
|
|
26
|
-
if (typeof Array.isArray === "function") {
|
|
27
|
-
return Array.isArray(arr);
|
|
28
|
-
}
|
|
29
|
-
// 否则,使用对象原型的 toString 方法进行检查
|
|
30
|
-
return Object.prototype.toString.call(arr) === "[object Array]";
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* @description 判断是否对象
|
|
35
|
-
* @param obj 传入对象值
|
|
36
|
-
* @return {Boolean}
|
|
37
|
-
*/
|
|
38
|
-
export const isObject = (obj: any): obj is Object => {
|
|
39
|
-
return Object.prototype.toString.call(obj) === "[object Object]";
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* @description 是否为base64图片
|
|
44
|
-
* @param {String} url
|
|
45
|
-
* @return
|
|
46
|
-
*/
|
|
47
|
-
export function isBase64Image(url: string) {
|
|
48
|
-
// 使用正则表达式检查URL是否以"data:image"开头,这是Base64图片的常见前缀
|
|
49
|
-
return /^data:image\/(png|jpg|jpeg|gif|bmp);base64,/.test(url);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* @description 是否图片
|
|
54
|
-
* @param {String} url
|
|
55
|
-
* @return
|
|
56
|
-
*/
|
|
57
|
-
export function isImage(url: string) {
|
|
58
|
-
// 使用正则表达式检查URL是否以"data:image"开头,这是Base64图片的常见前缀
|
|
59
|
-
return /(\.jpg|\.jpeg|\.png|\.gif|\.bmp|\.webp)$/i.test(url);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* 是否视频格式
|
|
64
|
-
* @param {String} value
|
|
65
|
-
*/
|
|
66
|
-
export function isVideo(value: string): boolean {
|
|
67
|
-
const VIDEO_REGEXP =
|
|
68
|
-
/\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i;
|
|
69
|
-
return VIDEO_REGEXP.test(value);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* 判断是否是日期格式
|
|
74
|
-
* @param {Number | String} value yyyy-mm-dd hh:mm:ss 或 时间戳
|
|
75
|
-
*/
|
|
76
|
-
export const isDate = (value: string | number) => {
|
|
77
|
-
if (!value) return false;
|
|
78
|
-
// number类型,判断是否是时间戳
|
|
79
|
-
if (typeof value === "number") {
|
|
80
|
-
// len === 10 秒级时间戳 len === 13 毫秒级时间戳
|
|
81
|
-
if (value.toString().length !== 10 && value.toString().length !== 13) {
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
return !isNaN(new Date(value).getTime());
|
|
85
|
-
}
|
|
86
|
-
if (typeof value === "string") {
|
|
87
|
-
// 是否为string类型时间戳
|
|
88
|
-
const numV = Number(value);
|
|
89
|
-
if (!isNaN(numV)) {
|
|
90
|
-
if (numV.toString().length === 10 || numV.toString().length === 13) {
|
|
91
|
-
return !isNaN(new Date(numV).getTime());
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// 非时间戳,且长度在yyyy-mm-dd 至 yyyy-mm-dd hh:mm:ss 之间
|
|
95
|
-
if (value.length < 10 || value.length > 19) {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
const dateRegex = /^\d{4}[-\/]\d{2}[-\/]\d{2}( \d{1,2}:\d{2}(:\d{2})?)?$/;
|
|
99
|
-
if (!dateRegex.test(value)) {
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
// 检查是否为有效日期
|
|
103
|
-
const dateValue = new Date(value);
|
|
104
|
-
return !isNaN(dateValue.getTime());
|
|
105
|
-
}
|
|
106
|
-
// 非number和string类型,不做校验
|
|
107
|
-
return false;
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* @description 验证是否是手机号格式
|
|
112
|
-
* @param {unknown} phone 手机号
|
|
113
|
-
*/
|
|
114
|
-
export const isPhone = (phone: unknown): boolean => {
|
|
115
|
-
if (typeof phone !== "string" && typeof phone !== "number") return false;
|
|
116
|
-
if (phone === "") return false;
|
|
117
|
-
|
|
118
|
-
const phoneStr = String(phone).trim();
|
|
119
|
-
// 处理 +86 12345678901 格式
|
|
120
|
-
const normalized = phoneStr.replace(/^\+86\s?/, "");
|
|
121
|
-
return /^1[3-9]\d{9}$/.test(normalized) && normalized.length === 11;
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* @description 验证身份证号码
|
|
126
|
-
* @param {unknown} idCard 身份证号
|
|
127
|
-
* @return {Boolean}
|
|
128
|
-
*/
|
|
129
|
-
export const isIdCard = (idCard: unknown): boolean => {
|
|
130
|
-
if (typeof idCard !== "string" && typeof idCard !== "number") return false;
|
|
131
|
-
const str = String(idCard).trim().toUpperCase();
|
|
132
|
-
|
|
133
|
-
// 格式校验:15位或18位
|
|
134
|
-
if (!/(^\d{15}$)|(^\d{17}[\dX]$)/.test(str)) return false;
|
|
135
|
-
|
|
136
|
-
// 18位身份证:校验校验码
|
|
137
|
-
if (str.length === 18) {
|
|
138
|
-
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
|
|
139
|
-
const checksums = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
|
|
140
|
-
|
|
141
|
-
let sum = 0;
|
|
142
|
-
for (let i = 0; i < 17; i++) {
|
|
143
|
-
sum += parseInt(str[i]) * weights[i];
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return checksums[sum % 11] === str[17];
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
return true; // 15位不校验
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* @description 验证是否是中文
|
|
154
|
-
* @param {String} zh 校验值
|
|
155
|
-
* @return {Boolean}
|
|
156
|
-
*/
|
|
157
|
-
export const isChinese = (zh: string): boolean => {
|
|
158
|
-
const reg = /^[\u4e00-\u9fa5]+$/gi;
|
|
159
|
-
return reg.test(zh);
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* @description 判断环境是否是H5
|
|
164
|
-
*/
|
|
165
|
-
export const isH5 = (() => {
|
|
166
|
-
let isH5 = false;
|
|
167
|
-
// #ifdef H5
|
|
168
|
-
isH5 = true;
|
|
169
|
-
// #endif
|
|
170
|
-
return isH5;
|
|
171
|
-
})();
|
|
1
|
+
/**
|
|
2
|
+
* @description 判断字符串是否是数字
|
|
3
|
+
* @param {String | Number} text 值
|
|
4
|
+
* @return {Boolean}
|
|
5
|
+
* */
|
|
6
|
+
export const isNumericString = (text: string | number): boolean => {
|
|
7
|
+
return typeof text === "string" && !isNaN(Number(text));
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @description 判断是否是数字
|
|
12
|
+
* @param {String | Number} text 值
|
|
13
|
+
* @return {Boolean}
|
|
14
|
+
* */
|
|
15
|
+
export const isNumber = (text: string | number): boolean => {
|
|
16
|
+
return typeof text === "number" || isNumericString(text);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @description 判断是否数组
|
|
21
|
+
* @param {any} arr 传入数组值
|
|
22
|
+
* @return {Boolean}
|
|
23
|
+
*/
|
|
24
|
+
export const isArray = (arr: any): arr is Array<any> => {
|
|
25
|
+
// 如果 Array.isArray 函数可用,直接使用该函数检查
|
|
26
|
+
if (typeof Array.isArray === "function") {
|
|
27
|
+
return Array.isArray(arr);
|
|
28
|
+
}
|
|
29
|
+
// 否则,使用对象原型的 toString 方法进行检查
|
|
30
|
+
return Object.prototype.toString.call(arr) === "[object Array]";
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @description 判断是否对象
|
|
35
|
+
* @param obj 传入对象值
|
|
36
|
+
* @return {Boolean}
|
|
37
|
+
*/
|
|
38
|
+
export const isObject = (obj: any): obj is Object => {
|
|
39
|
+
return Object.prototype.toString.call(obj) === "[object Object]";
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @description 是否为base64图片
|
|
44
|
+
* @param {String} url
|
|
45
|
+
* @return
|
|
46
|
+
*/
|
|
47
|
+
export function isBase64Image(url: string) {
|
|
48
|
+
// 使用正则表达式检查URL是否以"data:image"开头,这是Base64图片的常见前缀
|
|
49
|
+
return /^data:image\/(png|jpg|jpeg|gif|bmp);base64,/.test(url);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @description 是否图片
|
|
54
|
+
* @param {String} url
|
|
55
|
+
* @return
|
|
56
|
+
*/
|
|
57
|
+
export function isImage(url: string) {
|
|
58
|
+
// 使用正则表达式检查URL是否以"data:image"开头,这是Base64图片的常见前缀
|
|
59
|
+
return /(\.jpg|\.jpeg|\.png|\.gif|\.bmp|\.webp)$/i.test(url);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* 是否视频格式
|
|
64
|
+
* @param {String} value
|
|
65
|
+
*/
|
|
66
|
+
export function isVideo(value: string): boolean {
|
|
67
|
+
const VIDEO_REGEXP =
|
|
68
|
+
/\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i;
|
|
69
|
+
return VIDEO_REGEXP.test(value);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* 判断是否是日期格式
|
|
74
|
+
* @param {Number | String} value yyyy-mm-dd hh:mm:ss 或 时间戳
|
|
75
|
+
*/
|
|
76
|
+
export const isDate = (value: string | number) => {
|
|
77
|
+
if (!value) return false;
|
|
78
|
+
// number类型,判断是否是时间戳
|
|
79
|
+
if (typeof value === "number") {
|
|
80
|
+
// len === 10 秒级时间戳 len === 13 毫秒级时间戳
|
|
81
|
+
if (value.toString().length !== 10 && value.toString().length !== 13) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
return !isNaN(new Date(value).getTime());
|
|
85
|
+
}
|
|
86
|
+
if (typeof value === "string") {
|
|
87
|
+
// 是否为string类型时间戳
|
|
88
|
+
const numV = Number(value);
|
|
89
|
+
if (!isNaN(numV)) {
|
|
90
|
+
if (numV.toString().length === 10 || numV.toString().length === 13) {
|
|
91
|
+
return !isNaN(new Date(numV).getTime());
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// 非时间戳,且长度在yyyy-mm-dd 至 yyyy-mm-dd hh:mm:ss 之间
|
|
95
|
+
if (value.length < 10 || value.length > 19) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
const dateRegex = /^\d{4}[-\/]\d{2}[-\/]\d{2}( \d{1,2}:\d{2}(:\d{2})?)?$/;
|
|
99
|
+
if (!dateRegex.test(value)) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
// 检查是否为有效日期
|
|
103
|
+
const dateValue = new Date(value);
|
|
104
|
+
return !isNaN(dateValue.getTime());
|
|
105
|
+
}
|
|
106
|
+
// 非number和string类型,不做校验
|
|
107
|
+
return false;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @description 验证是否是手机号格式
|
|
112
|
+
* @param {unknown} phone 手机号
|
|
113
|
+
*/
|
|
114
|
+
export const isPhone = (phone: unknown): boolean => {
|
|
115
|
+
if (typeof phone !== "string" && typeof phone !== "number") return false;
|
|
116
|
+
if (phone === "") return false;
|
|
117
|
+
|
|
118
|
+
const phoneStr = String(phone).trim();
|
|
119
|
+
// 处理 +86 12345678901 格式
|
|
120
|
+
const normalized = phoneStr.replace(/^\+86\s?/, "");
|
|
121
|
+
return /^1[3-9]\d{9}$/.test(normalized) && normalized.length === 11;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* @description 验证身份证号码
|
|
126
|
+
* @param {unknown} idCard 身份证号
|
|
127
|
+
* @return {Boolean}
|
|
128
|
+
*/
|
|
129
|
+
export const isIdCard = (idCard: unknown): boolean => {
|
|
130
|
+
if (typeof idCard !== "string" && typeof idCard !== "number") return false;
|
|
131
|
+
const str = String(idCard).trim().toUpperCase();
|
|
132
|
+
|
|
133
|
+
// 格式校验:15位或18位
|
|
134
|
+
if (!/(^\d{15}$)|(^\d{17}[\dX]$)/.test(str)) return false;
|
|
135
|
+
|
|
136
|
+
// 18位身份证:校验校验码
|
|
137
|
+
if (str.length === 18) {
|
|
138
|
+
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
|
|
139
|
+
const checksums = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
|
|
140
|
+
|
|
141
|
+
let sum = 0;
|
|
142
|
+
for (let i = 0; i < 17; i++) {
|
|
143
|
+
sum += parseInt(str[i]) * weights[i];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return checksums[sum % 11] === str[17];
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return true; // 15位不校验
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @description 验证是否是中文
|
|
154
|
+
* @param {String} zh 校验值
|
|
155
|
+
* @return {Boolean}
|
|
156
|
+
*/
|
|
157
|
+
export const isChinese = (zh: string): boolean => {
|
|
158
|
+
const reg = /^[\u4e00-\u9fa5]+$/gi;
|
|
159
|
+
return reg.test(zh);
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* @description 判断环境是否是H5
|
|
164
|
+
*/
|
|
165
|
+
export const isH5 = (() => {
|
|
166
|
+
let isH5 = false;
|
|
167
|
+
// #ifdef H5
|
|
168
|
+
isH5 = true;
|
|
169
|
+
// #endif
|
|
170
|
+
return isH5;
|
|
171
|
+
})();
|