# pure-v
**Repository Path**: cty901/pure-v
## Basic Information
- **Project Name**: pure-v
- **Description**: purev.js: A lightweight, extensible, pure js validation plugin
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2024-05-10
- **Last Updated**: 2024-05-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# [pure-v](https://www.github.com/theajack/pure-v)
🚀 轻量级、可扩展的纯粹的js验证插件
**[English](https://github.com/theajack/pure-v/blob/master/README.md) | [在线使用](https://theajack.gitee.io/jsbox/?github=theajack.pure-v) | [更新日志](https://github.com/theajack/pure-v/blob/master/helper/version.md) | [反馈错误/缺漏](https://github.com/theajack/pure-v/issues/new) | [Gitee](https://gitee.com/theajack/pure-v)**
---
### 1. 特性
1. typescript 编写
2. 多端支持
3. 自定义验证规则、错误提示
4. 支持dom元素绑定
5. 体积小巧,简单易用
### 2. 快速使用
#### 2.1 npm 安装
```
npm i pure-v
```
```js
import purev from 'pure-v';
purev('2020-01-01', 'date');
```
#### 2.2 cdn
```html
```
### 3 api
```ts
interface IPureV {
(text: TValidText, rule: TRule): ITextValidResult;
(json: Json, rules: Json): IJsonValidResult;
(formName: string | HTMLElement): IFormValidResult;
useToast: boolean;
toast(text: string): void;
tip(rule: string | Json, text: string): void;
reg(rule: string | Json, reg?: IReg): void;
lang(lang: TLang): void | never;
onOnePass(option: IBaseValidResult, dom?: HTMLElement): void;
onOneFail(option: IBaseValidResult, dom?: HTMLElement): void;
}
```
#### 3.1 验证文本
```js
purev('2020-01-02', 'date')
```
#### 3.2 验证json
```js
purev({
name: 'theajack',
birthday: '1994-01-01',
email: 'me@theajack.com',
intro: ''
}, {
name: 'notnull',
birthday: 'date',
email: 'email',
intro: 'notnull'
});
```
#### 3.3 绑定DOM
```html
name:
birthday:
```
支持使用 pv-form 属性,css选择器,或dom元素
当元素有 pv-rule 属性时,则只验证当前元素,否则验证该元素所有含有 pv-rule 属性的子元素
有以下属性
1. pv-form 待验证的表单
2. pv-rule 验证规则
3. pv-name 给验证内容起一个名称
4. pv-attr 用于获取验证的文本,默认值为 value, 可选值有 value, text, html, src, href
5. pv-res 当验证失败时,验证dom元素 会带有 pv-res=fail
### 4. 自定义规则
```js
purev.reg('custom', /^\d{3,4}$/);
purev.reg('customFn', (v) => {
return v === 'purev' || v === 'PUREV';
});
purev('123', 'custom').pass,
purev('aaa', 'custom').pass,
purev('12345', 'custom').pass,
purev('purev', 'customFn').pass,
purev('PUREV', 'customFn').pass,
purev('xxxxx', 'custom').pass,
```
### 5. 自定义错误提示
```js
purev.tip('date', '自定义日期提示');
purev('xxx', 'date').message;
```
### 6. 成功和失败监听
```js
purev.onOnePass = (result) => {
// ...
};
purev.onOneFail = (result) => {
// ...
};
```
onOnePass 和 onOneFail 为单例模式,如需设置请直接覆盖这两个属性
### 7 使用实例
```js
const result = {
notnull: [
purev('', 'notnull').pass,
purev('xx', 'notnull').pass,
],
date: [
purev('xx', 'date').pass,
purev('2020-01-02', 'date').pass,
purev('2020-13-02', 'date').pass,
],
email: [
purev('theajack@qq.com', 'email').pass,
purev('xx', 'email').pass,
],
number: [
purev('1', 'number').pass,
purev('12', 'number').pass,
purev('12.3a', 'number').pass,
purev('a12.3', 'number').pass,
purev('123', 'number[3]').pass,
purev('1234', 'number[3]').pass,
purev('12345', 'number[3,6]').pass,
],
idcard: [
purev('340827111111111111', 'idcard').pass,
purev('34082711111111111X', 'idcard').pass,
purev('3408271111111111111', 'idcard').pass,
],
length: [
purev('123456', 'length[6]').pass,
purev('1234你好', 'length[6]').pass,
purev('1234567', 'length[6,9]').pass,
],
url: [
purev('https://www.baidu.com', 'url').pass,
purev('http://www.baidu.com', 'url').pass,
purev('xxxx', 'url').pass,
],
decimal: [
purev('1.1', 'decimal').pass,
purev('0.1', 'decimal').pass,
purev('0.1a', 'decimal').pass,
purev('11', 'decimal').pass,
],
lengthOfAny: [
purev('123456', 'lengthOfAny[6]').pass,
purev('1234你好', 'lengthOfAny[6]').pass,
purev('12345你好', 'lengthOfAny[6]').pass,
],
phone: [
purev('11111111111', 'phone').pass,
purev('1234', 'phone').pass,
purev('22222222222', 'phone').pass,
],
letterStart: [
purev('a12', 'letterStart').pass,
purev('a121', 'letterStart[4]').pass,
purev('a121', 'letterStart[3, 5]').pass,
purev('a1212a', 'letterStart[3, 5]').pass,
],
range: [
purev('99', 'range[100, 200]').pass,
purev('123', 'range[100, 200]').pass,
purev('200', 'range[100, 200]').pass,
purev('201', 'range[100, 200]').pass,
],
express: [
purev('123', 'express[^\\d{3,4}$]').pass,
purev('aaa', 'express[^\\d{3,4}$]').pass,
purev('12345', 'express[^\\d{3,4}$]').pass,
],
withNull: [
purev('11111111111', 'phone').pass,
purev('', 'phone').pass,
purev('', 'phone null').pass,
]
};
```
```js
purev({
name: 'theajack',
birthday: '1994-01-01',
email: 'me@theajack.com',
intro: ''
}, {
name: 'notnull',
birthday: 'date',
email: 'email',
intro: 'notnull'
})
```
```js
purev.reg('custom', /^\d{3,4}$/);
purev.reg('customFn', (v) => {
return v === 'purev' || v === 'PUREV';
});
```
### 8 ts 接口
1. IPureV
2. ITextValidResult
3. IJsonValidResult
5. IFormValidResult
```ts
export interface IPureV {
(text: TValidText, rule: TRule): ITextValidResult;
(json: Json, rules: Json): IJsonValidResult;
(formName: string | HTMLElement): IFormValidResult;
useToast: boolean;
toast(text: string): void;
tip(rule: string | Json, text: string): void;
reg(rule: string | Json, reg?: IReg): void;
lang(lang: TLang): void | never;
onOnePass(option: IBaseValidResult, dom?: HTMLElement): void;
onOneFail(option: IBaseValidResult, dom?: HTMLElement): void;
}
interface IBaseValidResult {
pass: boolean;
message: string;
name?: string;
reg?: RegExp;
text: string;
}
export interface ITextValidResult extends IBaseValidResult {}
export interface IJsonValidResult {
pass: boolean;
message?: string;
results: {
[prop in string]: IBaseValidResult;
}
}
interface IDomValidResult extends IBaseValidResult {
dom: HTMLElement
}
export interface IFormValidResult {
pass: boolean;
message?: string;
results: {
[prop in string]: IDomValidResult;
}
}
```