## [@youngbeen/angle-util](https://www.npmjs.com/package/@youngbeen/angle-util)

[TOC]

### validator

引用

```javascript
import { validator } from '@youngbeen/angle-util'
```

#### 是否为空白无效字符串（剔除无效的空格之后） `isBlankStr`

#### 是否为数字 `isNumber`

#### 是否包含数字 `hasNumber`

#### 是否为小数 `isFloatNum`

#### 是否为小写英文字母 `isLowercase`

#### 是否包含小写英文字母 `hasLowercase`

#### 是否为大写英文字母 `isUppercase`

#### 是否包含大写英文字母 `hasUppercase`

#### 是否为英文或者数字 `isNumbersOrLetters`

#### 是否为中文字符 `isCnCharacter`

#### 是否包含中文字符 `hasCnCharacter`

#### 是否为特殊字符 `isSpecialCharacter`

#### 是否包含特殊字符 `hasSpecialCharacter`

#### 是否长度处于 `isLengthBetween`

#### 是否是名称（只能是中英文） `isName`

#### 是否是昵称名称（只能是中英文或者数字） `isNickName`

#### 是否是公司名称（只能是中英文和括号以及部分特殊符号） `isCompany`

#### 是否是金额（最多2位小数） `isAmount`

#### 是否是重量（最多3位小数） `isWeight`

#### 是否是手机号码 `isMobileNo`

#### 是否是固定电话（区号-号码 格式） `isTelephoneNo`

#### 是否是传真（仅限数字和-） `isFax`

#### 是否是微信号(2-20的长度，只能包含英文字母、数字、减号、下划线) `isWechatNo`

#### 是否是网址 `isUrl`

#### 是否是银行卡号（限定16-19位） `isCardNo`

#### 是否是身份证号 `isIdCardNo`

#### 是否是email地址 `isEmailAddress`

#### 是否是登录账户（只能包含字母/数字或下划线,且以字母开头） `isLoginName`

```javascript
validator.isBlankStr('') // true
validator.isBlankStr('a') // false
validator.isNumber('ab') // false
validator.isNumber('123') // true
validator.hasNumber('123abc') // true
validator.isFloatNum('123.2') // true
validator.isLowercase('abc') // true
validator.hasLowercase('abcDEF') // true
validator.isUppercase('ABC') // true
validator.hasUppercase('abcDEF') // true
validator.isNumbersOrLetters('ABC12') // true
validator.isCnCharacter('ABC') // false
validator.hasCnCharacter('abcDEF我') // true
validator.isSpecialCharacter('ABC') // false
validator.hasSpecialCharacter('abcDEF我') // false
validator.isLengthBetween('ABC12', 2, 5) // true
validator.isName('张三') // true
validator.isNickName('张三12') // true
validator.isCompany('银联商务') // true
validator.isAmount('12.23') // true
validator.isWeight('12.233') // true
validator.isMobileNo('12233334444') // true
validator.isTelephoneNo('027-88483843') // true
validator.isFax('027-88483843') // true
validator.isWechatNo('Youngbeen') // true
validator.isUrl('https://www.abc.com') // true
validator.isCardNo('6273772873772837') // true
validator.isIdCardNo('420222190001019992') // true
validator.isEmailAddress('abc@some.com') // true
validator.isLoginName('abcawef') // true
```

#### 是否是指定长度的数字 `isNumberAtLength`

`validator.isNumberAtLength(string, length)`

* string参数必须，代表需要校验的字符串
* length参数必须，代表需要校验的位数

```javascript
validator.isNumberAtLength('123', 3) // true
```

---

### anonymizer

引用

```javascript
import { anonymizer } from '@youngbeen/angle-util'
```

#### 隐私化手机号 `fixMobileNo`

#### 隐私化电话号码 `fixTelNo`

#### 隐私化银行卡号 `fixCardNo`

#### 隐私化身份证号 `fixCertNo`

#### 隐私化姓名 `fixName`

```javascript
anonymizer.fixMobileNo('12311112222') // '123****2222'
anonymizer.fixTelNo('02711112222') // '027****2222'
anonymizer.fixCardNo('6222111122223333') // '622*********3333'
anonymizer.fixCertNo('420000111122223333') // '420000111****23333'
anonymizer.fixName('张三') // '张*'
anonymizer.fixName('张三丰') // '张*丰'
anonymizer.fixName('西门吹雪') // '西**雪'
anonymizer.fixName('张三', true) // '*三'
anonymizer.fixName('张三丰', true) // '*三丰'
```

---

### deviceUtil

引用

```javascript
import { deviceUtil } from '@youngbeen/angle-util'
```

#### 判断是否是微信 `isWechat`

```javascript
deviceUtil.isWechat() // false
```

#### 判断是否是IOS `isIOS`

```javascript
deviceUtil.isIOS() // true
```

#### 判断是否是安卓 `isAndroid`

```javascript
deviceUtil.isAndroid() // false
```

---

### dateUtil

引用

```javascript
import { dateUtil } from '@youngbeen/angle-util'
```

#### 转化秒数为可阅读时间 `getReadableTimeBySeconds`

```javascript
getReadableTimeBySeconds(time, {
  [seconds: 'yes'|'no'|'dynamic',]
  [secondsDynamicLimit: 60]
})
```

* time参数必须，代表待转化的秒数，限定整型
* seconds参数可选，代表秒模式，默认'yes'一直显示秒，'no'不显示秒， 'dynamic'动态显示（时间低于设定值时，显示秒，其他时候不显示秒）
* secondsDynamicLimit参数可选，代表秒动态显示设定值，默认60秒，即默认低于一分钟时则显示秒，其他时候不显示秒（该参数匹配seconds为'dynamic'时生效）

```javascript
let detail = dateUtil.getReadableTimeBySeconds(23881)
// { days: 0, hours: 6, minutes: 38, seconds: 1, timeString: "6小时38分钟1秒" }
detail = dateUtil.getReadableTimeBySeconds(23881, { seconds: 'no' }))
// { days: 0, hours: 6, minutes: 38, seconds: 1, timeString: "6小时38分钟" }
```

#### 格式化日期时间 `formatDateTime`

`formatDateTime(format, [time])`

* format参数必选，指定要格式化为的格式（其中YYYY指代全年份，YY指代缩略年份，MM指代月份，DD指代日，HH指代小时，mm指代分钟，ss指代秒）
* time参数可选，代表待格式化的时间（可接受能转化为js date类型的时间，字符串等），默认使用当前时间

```javascript
// 假如当前时间是2019-03-15 03:48:50
dateUtil.formatDateTime('YYYYMM') // '201903'
let time = 1452592930000 // 2016-01-12 18:02:10
dateUtil.formatDateTime('MM/DD/YYYY HH:mm', time) // '01/12/2016 18:02'
dateUtil.formatDateTime('YYYY年MM月DD日HH时mm分ss秒', time) // '2016年01月12日18时02分10秒'
```

#### 获取格式化日期时间 `getDateTime`

`getDateTime(time, [type], [seperator])`

* time参数必选，代表待格式化的时间（可接受能转化为js date类型的时间，字符串等）
* type参数可选，代表格式化的类型，'short'与's'指代短类型(e.g. 2016-1-12 18:02:10)，'long'与'l'指代长类型(e.g. 2016-01-12 18:02:10)。默认是长类型
* seperator参数可选，代表分隔日期的分隔字符，默认是'-'，用 - 分隔

```javascript
dateUtil.getDateTime() // ''
let time = 1452592930000
console.log(dateUtil.getDateTime(time)) // '2016-01-12 18:02:10'
console.log(dateUtil.getDateTime(time, 'short', '.')) // '2016.1.12 18:02:10'
```

#### 获取格式化日期 `getDate`

`getDate(time, [type], [seperator])`

* time参数必选，代表待格式化的时间（可接受能转化为js date类型的时间，字符串等）
* type参数可选，代表格式化的类型，'short'与's'指代短类型(e.g. 2016-1-12)，'long'与'l'指代长类型(e.g. 2016-01-12)。默认是长类型
* seperator参数可选，代表分隔日期的分隔字符，默认是'-'，用 - 分隔

```javascript
console.log(dateUtil.getDate()) // ''
let time = 1452592930000
console.log(dateUtil.getDate(time)) // '2016-01-12'
console.log(dateUtil.getDate(time, 'short', '.')) // '2016.1.12'
```

#### 获取格式化时间 `getTime`

`getTime(time, [type])`

* time参数必选，代表待格式化的时间（可接受能转化为js date类型的时间，字符串等）
* type参数可选，代表格式化的类型，'short'与's'指代短类型(e.g. 18:02)，'long'与'l'指代长类型(e.g. 18:02:10)。默认是长类型

```javascript
console.log(dateUtil.getTime()) // ''
let time = 1452592930000
console.log(dateUtil.getTime(time)) // '18:02:10'
console.log(dateUtil.getTime(time, 'short')) // '18:02'
```

---

### numberUtil

引用

```javascript
import { numberUtil } from '@youngbeen/angle-util'
```

#### 保留n位小数四舍五入 `round`

`round(num, [n])`

* num参数必须，代表需要处理的数字 
* n参数可选，代表需要保留的小数位，默认为0保留到整数

```javascript
numberUtil.round(1.23) // 1
numberUtil.round(0.1) // 0
numberUtil.round(-0.1) // 0
numberUtil.round(1.23456, 2) // 1.23
numberUtil.round(1.23456, 3) // 1.235
numberUtil.round(1.2032, 2) // 1.2
numberUtil.round(0.0032, 2) // 0
```

#### 生成随机数 `random`

`random([max], [min])`

* max参数可选，代表生成的随机数上限值，包含该值，默认为9 
* min参数可选，代表生成的随机数下限值，包含该值，默认为0

```javascript
numberUtil.random() // 默认生成0~9的随机数（包含0和9）
numberUtil.random(3) // 生成0~3的随机数（包含0和3）
numberUtil.random(3, 1) // 生成1~3的随机数（包含1和3）
numberUtil.random(3, 6) // 传入了错误的下限值，将生成3~3的随机数（即永远返回3）
```

#### 批量生成随机数 `multiRandom`

`multiRandom([count], [max], [min], [isDuplicate])`

* count参数可选，代表生成的随机数个数，默认2，生成2个随机数 
* max参数可选，代表生成的随机数上限值，包含该值 
* min参数可选，代表生成的随机数下限值，包含该值 
* isDuplicate参数可选，代表是否生成的随机数可以重复，默认false不可以重复

> 返回的结果始终是数组
> 
> 如果生成的随机数不允许重复，那么一定保证生成区间足够生成需求的随机数个数！

```javascript
// 默认生成2个随机数，生成区间0~9（包含0和9），随机数不重复，例如返回[3, 9]
numberUtil.multiRandom()

// 生成5个随机数，生成区间0~9（包含0和9），随机数不重复，例如返回[3, 9, 0, 2, 8]
numberUtil.multiRandom(5)

// 生成3个随机数，生成区间1~6（包含1和6），随机数不重复，例如返回[3, 1, 5]
numberUtil.multiRandom(3, 6, 1)

// 生成8个随机数，生成区间1~6（包含1和6），随机数可重复，例如返回[3, 1, 5, 2, 3, 6, 2, 5]
numberUtil.multiRandom(8, 6, 1, true)
```

---

### arrayUtil

引用

```javascript
import { arrayUtil } from '@youngbeen/angle-util'
```

#### 深拷贝 `deepCopy`

`deepCopy(original: any): any`

* original参数必须，代表需要深拷贝的内容

```javascript
let arr = [1, 2, 3]
let newArr = arrayUtil.deepCopy(arr)
```

---

### textUtil

引用

```javascript
import { textUtil } from '@youngbeen/angle-util'
```

#### 修正电话号码 `fixPhoneStr`

```javascript
textUtil.fixPhoneStr('abc123de*4') // '1234'
```

---

### moneyUtil

引用

```javascript
import { moneyUtil } from '@youngbeen/angle-util'
```

#### 分转元 `fenToYuan`

```javascript
// 可接收数字或者字符串
moneyUtil.fenToYuan(100) // '1.00'
moneyUtil.fenToYuan(100.12) // '1.00'
moneyUtil.fenToYuan(125) // '1.25'
moneyUtil.fenToYuan('125') // '1.25'
```

#### 元转分 `yuanToFen`

```javascript
// 可接收数字或者字符串
moneyUtil.yuanToFen(100) // '10000'
moneyUtil.yuanToFen(1.12) // '112'
moneyUtil.yuanToFen(1.123) // '112'
moneyUtil.yuanToFen('1.234') // '123'
```

#### 元转万 `yuanToWan`

```javascript
// 可接收数字或者字符串，可指定保留多少位小数，默认保留2位
moneyUtil.yuanToWan(100) // '0.01'
moneyUtil.yuanToWan(1.12) // '0.00'
moneyUtil.yuanToWan(12345.4) // '1.23'
moneyUtil.yuanToWan(12345.4, 0) // '1'
moneyUtil.yuanToWan(12345.4, 1) // '1.2'
moneyUtil.yuanToWan('12345.4', 3) // '1.235'
```

#### 金额格式化 `moneyStyle`

```javascript
// 可接收数字或者字符串
moneyUtil.moneyStyle(12345) // '12,345'
moneyUtil.moneyStyle(12345.4) // '12,345.4'
moneyUtil.moneyStyle(12345678) // '123,456,789'
moneyUtil.moneyStyle(1.2) // '1.2'
moneyUtil.moneyStyle(1.23) // '1.23'
moneyUtil.moneyStyle(100.12) // '100.12'
```

---
