Socket
Socket
Sign inDemoInstall

base-validator

Package Overview
Dependencies
0
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.1 to 0.0.2

44

lib/validator.js

@@ -25,3 +25,3 @@ // 定义在全局,避免每次校验都花时间初始化正则。

digits: function (actual) {
return actual === parseInt(actual) || DIGITS.test(actual)
return (typeof actual === 'number' && actual % 1 === 0) || DIGITS.test(actual)
},

@@ -136,11 +136,9 @@

date: function (actual) {
},
dateISO: function (actual) {
},
/**
* 值相等。对于复合类型(数组和对象),进行递归对比。对于基本类型,进行全等对比(即对比类型和值)。
* @param {any} actual 实际值
* @param {any} expected 期望值
*/
equalTo: function (actual, expected) {
// 对于数组,按序对比每一项
if (Array.isArray(actual) && Array.isArray(expected)) {

@@ -153,2 +151,3 @@ if (actual.length === expected.length) {

}
// 对于对象,对比所有字段。对象的键一样,且值也一样。忽略对象原型链上的属性。
} else if (typeof actual === 'object' && typeof expected === 'object' && actual && expected) {

@@ -158,9 +157,13 @@ let keyListA = Object.keys(actual)

if (keyListA.length === keyListB.length) {
let iterator = function (item, i) {
let valA = actual[item]
let valB = expected[keyListB[i]]
return this.equalTo(valA, valB)
let iterator = function (item) {
return expected.hasOwnProperty(item) && this.equalTo(actual[item], expected[item])
}
return keyListA.every(iterator.bind(this))
}
} else if (typeof actual === 'string' && typeof expected === 'string') {
// 对于字符串,进行对比时,忽略前后包含的空白字符。
return actual.trim() === expected.trim()
} else if (this.number(actual) && this.number(expected)) {
// 对于期望值和实际值都是数字类型,进行隐式转换后,再对比
return actual == expected
} else {

@@ -171,2 +174,3 @@ return actual === expected

// 包含期望值。对于数组,对比的是单项;对于字符串,对比的是字串。
contains: function (actual, expected) {

@@ -176,3 +180,7 @@ return (Array.isArray(actual) || typeof actual === 'string') && actual.contains(expected)

// 在期望值中存在。对于数组,对比的是单项;对于字符串,对比的是字串。
in: function (actual, expected) {
if (!(Array.isArray(expected) || typeof expected === 'string')) {
throw new TypeError('in() expected 应为数组或字符串')
}
return expected.contains(actual)

@@ -187,2 +195,5 @@ }

STRATEGY.eq = STRATEGY.equalTo
STRATEGY.length = STRATEGY.lengthBetween
STRATEGY.gte = STRATEGY.min
STRATEGY.lte = STRATEGY.max

@@ -224,3 +235,3 @@ /**

// 如果校验的数据对象不存在 property 指定的属性,则跳过。
if (!(prop in data)) return
if (!data.hasOwnProperty(prop)) return

@@ -246,2 +257,7 @@ return !assert(actual, expected)

Validator.all = function (data, rule) {
let allErrors = true
return Validator(data, rule, allErrors)
}
module.exports = Validator
{
"name": "base-validator",
"version": "0.0.1",
"version": "0.0.2",
"description": "基础的表单验证器",
"main": "index.js",
"scripts": {},
"scripts": {
"test": "mocha"
},
"repository": {

@@ -24,3 +26,6 @@ "type": "git",

},
"homepage": "https://github.com/pengng/base-validator#readme"
"homepage": "https://github.com/pengng/base-validator#readme",
"devDependencies": {
"mocha": "^5.2.0"
}
}

@@ -6,12 +6,2 @@ # base-validator

在确保校验准确度的前提下,尽可能放宽规则。例:
- 符合数字格式的字符串或`Number`类型均可以通过 **number** 校验。
- 允许数据前后包含空白字符,用户可能不会注意到输入了空白字符。
- **0** 和 **false** 出现在表单内,常作为 `<input type="number" />` 和 `<input type="checkbox" />` 的结果值。应当作有效值,可以通过 **required** 校验。
- 包含一个或多个空白字符的字符串,不包含任何可见字符,可能是用户无意中输入,但发现不到,这应当被 **required** 校验阻止。
### Usage

@@ -25,4 +15,4 @@

const Validator = require('base-validator')
const assert = [
// 定义校验规则
const rule = [
{

@@ -32,40 +22,11 @@ prop: 'phone',

assert: 'required'
},
{
prop: 'phone',
msg: '手机号码长度应为11位',
assert: 'betweenLength',
expected: [11, 11]
},
{
prop: 'phone',
msg: '手机号码不正确',
assert: 'tel'
},
{
prop: 'code',
msg: '验证码不能为空',
assert: 'required'
},
{
prop: 'code',
msg: '验证码应为6位',
assert: 'betweenLength',
expected: [6, 6]
},
{
prop: 'code',
msg: '验证码不正确',
assert: 'regular',
expected: '/^\\d{6}$/'
}
]
// 待校验的数据
const form = {
phone: ' ',
code: '23342'
phone: ' ' // 该值只包含空格和制表符,无法通过 required 校验
}
const msg = Validator(assert, form)
console(msg)
const msg = Validator(form, rule)
console(msg) // 手机号码不能为空
```

@@ -75,2 +36,21 @@

### Validator(data, rule)
校验数据是否符合期望值。返回第一项不通过的项目的错误提示语 \<string\>。全部通过时返回 **undefined**
- `data` \<object\> 待校验的数据对象
- `rule` \<Array[object]\> 校验的规则,对象数组。
- `property` \<string\> 校验的字段名。**Alias:prop、key**
- `message` \<string\> 校验不通过时的提示语。**Alias:msg**
- `assert` \<string\> 校验的策略,支持的列表参考 [**Assert**](#Assert) 表。
- `expected` \<any\> 期望值。**部分校验策略需要带期望值**。
### Validator.all(data, rule)
同 [**Validator(data, rule)**](#validatordata-rule) ,但返回全部不通过的项目。
### Assert

@@ -80,19 +60,30 @@

| ------------- | ------------------------------------------------------------ |
| tel | 手机号码 |
| email | 电子邮箱 |
| idcard | 居民身份证 |
| url | url |
| min | 最小值 |
| max | 最大值 |
| minlength | 最小长度值 |
| maxlength | 最大长度值 |
| number | 允许 Number 类型或符合数字格式的字符串(前后可包含一个或多个空白字符,可以是小数和负数) |
| digits | 整数 |
| between | 在最小值和最大值之间 |
| betweenLength | 在最小长度值和最大长度值之间 |
| equalTo | 值相等 |
| contains | 包含给定值 |
| in | 在给定值内存在 |
| tel | 手机号码。别名:**mobile**、**phone** |
| email | 电子邮箱。别名:**mail** |
| idcard | 居民身份证。 |
| url | url。别名:**URL** |
| min | 最小值。仅允许数字类型和数字格式字符串,不允许布尔值。别名:**gte** |
| max | 最大值。仅允许数字类型和数字格式字符串,不允许布尔值。别名:**lte** |
| minlength | 最小长度值。对于数组,元素的个数应大于等于期望值;对于字符串,则是字符的个数。期望值描述的是长度,应为整数类型 |
| maxlength | 最大长度值。对于数组,元素的个数应小于等于期望值;对于字符串,则是字符的个数。期望值描述的是长度,应为整数类型 |
| number | 数字类型。允许 Number 类型或符合数字格式的字符串(前后可包含一个或多个空白字符,可以是小数和负数) |
| digits | 整数类型。允许整数或整数格式的字符串(前后可包含一个或多个空白字符,可以是负数) |
| between | 实际值应该在期望的上限和下限之间,包含上限和下限。期望值可以是单个元素的数组或数字类型,则上限值和下限值相等。上限值和下限值不区分顺序,小的值为下限,大的值为上限。 |
| lengthBetween | 实际值的长度应该在期望的上限和下限之间,包含上限和下限。期望值可以是单个元素的数组或数字类型,则上限值和下限值相等。上限值和下限值不区分顺序,小的值为下限,大的值为上限。别名:**length** |
| equalTo | 值相等。对于复合类型(数组和对象),进行递归对比。对于基本类型,进行全等对比(即对比类型和值)。别名:**eq** |
| contains | 包含期望值。对于数组,对比的是单项;对于字符串,对比的是字串。 |
| in | 在期望值中存在。对于数组,对比的是单项;对于字符串,对比的是字串。 |
| regular | 正则校验。期望值是 **RegExp** 类型或 **string** 类型(正则字面量格式) |
| required | 必填。**0** 和 **false** 属于有效值,仅包含一个或多个空白字符的字符串属于无效值 |
### Tips
在确保校验准确度的前提下,尽可能放宽规则。例:
- 符合数字格式的字符串或`Number`类型均可以通过 **number** 校验。
- 允许数据前后包含空白字符,用户可能不会注意到输入了空白字符。
- **0** 和 **false** 出现在表单内,常作为 `<input type="number" />` 和 `<input type="checkbox" />` 的结果值。应当作有效值,可以通过 **required** 校验。
- 包含一个或多个空白字符的字符串,不包含任何可见字符,可能是用户无意中输入,但发现不到,这应当被 **required** 校验阻止。
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc