New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

utils2

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

utils2 - npm Package Compare versions

Comparing version 1.0.1 to 1.0.2

test/_.date.js

221

lib/_.js

@@ -83,2 +83,223 @@ const _ = {

return res;
},
/**
* 两个字符串
*/
compare: function (str1, str2) {
let len1 = str1.length,
len2 = str2.length;
for (let i = 0; i < len1 && i < len2; i++) {
if (str1.charCodeAt(i) !== str2.charCodeAt(i)) {
return str1.charCodeAt(i) - str2.charCodeAt(i);
}
}
return len1 - len2;
},
/**
* 阿拉伯数字转汉语数字
*/
num2zh: function (num) {
num = num ? num.toString() : '';
var res = '';
var d = {
'0': '零',
'1': '一',
'2': '二',
'3': '三',
'4': '四',
'5': '五',
'6': '六',
'7': '七',
'8': '八',
'9': '九'
};
for (var i = 0; i < num.length; i++) {
res += d[num[i]];
}
return res;
},
/**
* 数组按指定方法排序
*/
sortBy: function (arrs, func) {
return arrs.sort(func);
},
/**
* 数组中是否有指定项
*/
hasOne: function (arr, func) {
for (let i = arr.length - 1; i >= 0; i--) {
if (true === func(arr[i])) {
return true;
}
}
return false;
},
/**
* 日期对象操作
*/
date: {
YEAR: 'Y',
QUARTER: 'Q',
MONTH: 'M',
DATE: 'D',
DAY: 'W',
HOUR: 'H',
MINUTE: 'I',
SECOND: 'S',
/**
* 将时间按指定格式转为字符串 小写都是阿拉伯数字大写是汉字数字
* 格式首字母大写这转为汉字
* @param {date} date 日期对象
* @param {string} Y/y/YY/yy - 年份 一七/17/二零一七/2017
* @param {string} Q/q - 季度 三/3
* @param {string} M/m/mm - 月 九/9/09
* @param {string} W/w - 周 一/1
* @param {string} D/d/dd - 日 九/9/09
* @param {string} H/h/hh - 时 四/4/04 23
* @param {string} I/i - 分
* @param {string} S/s - 秒
* @return {string} - 格式化的字符串
*/
format: function (date, format) {
var res = format,
m = '',
stack = [],
reg = /\{(\w{1,2})\}/g;
while ((m = reg.exec(format)) !== null) {
if (stack.indexOf(m[1]) === -1) {
stack.push(m[1]);
}
}
for (var i = 0; i < stack.length; i++) {
var k = stack[i];
var bZH = (k.charCodeAt(0) > 96) ? false : true;
var bLong = (k.length === 2 && k[0].toLowerCase() === k[1].toLowerCase()) ? true : false;
var v = null;
switch (k[0].toUpperCase()) {
case this.YEAR:
v = date.getFullYear();
if (bLong === false) {
v = v % 100;
}
break;
case this.QUARTER:
v = Math.floor((date.getMonth() + 3) / 3);
break;
case this.MONTH:
v = date.getMonth() + 1;
break;
case this.DAY:
v = date.getDay();
break;
case this.DATE:
v = date.getDate();
break;
case this.HOUR:
v = date.getHours();
break;
case this.MINUTE:
v = date.getMinutes();
break;
case this.SECOND:
v = date.getSeconds();
break;
default: break;
}
//如果指定最小两位长度则个位数前补零
if (bLong && v < 10) {
v = '0' + v;
}
//如果是大写字母则数字转中文
if (bZH) {
v = _.num2zh(parseInt(v));
}
res = res.replace(new RegExp('{' + k + '}', 'g'), v);
}
return res;
},
/**
* 计算指定格式差值
* @param {Date} date - 要比较的日期
* @param {string} [format=s] - 比较的格式 s/i/h/d/w
* @return {string} - 返回字符串
*/
offset: function (date1, date2, format) {
let t0 = date1.getTime(),
t1 = date2.getTime();
var res = Math.floor((t0 - t1) / 1000);
if (!format) {
format = this.SECOND;
}
switch (format.toUpperCase()) {
case this.MINUTE:
res /= 60;
break;
case this.HOUR:
res /= 60 * 60;
break;
case this.DATE:
res /= 60 * 60 * 24;
break;
case this.DAY:
res /= 60 * 60 * 24 * 7;
break;
default:
break;
}
return Math.floor(res * 10) / 10;
},
/**
* 时间加减计算
* @param {date} date - 日期对象
* @param {int} val - 负数代表日期过去,正数代表日期未来
* @param {int} format - @enum s/i/h/d/w/y 0/1/2/3/4/- 就是没有按月计算的~~
*/
compute: function (date, val, format) {
var ts = Math.ceil(date.getTime() / 1000);
var level = 0;
if (!format) {
format = this.SECOND;
} else {
format = format.toUpperCase();
}
val = parseInt(val) || 0;
switch (format) {
case this.SECOND:
level = 0;
break;
case this.MINUTE:
level = 1;
break;
case this.HOUR:
level = 2;
break;
case this.DATE:
level = 3;
break;
case this.DAY:
level = 4;
break;
case this.YEAR: break;
default: break;
}
if (format === this.YEAR) {
date.setFullYear(date.getFullYear() + val);
} else {
if (level > 0) {
val *= 60;
}
if (level > 1) {
val *= 60;
}
if (level > 2) {
val *= 24;
}
if (level > 3) {
val *= 7;
}
date.setTime((ts + val) * 1000);
}
return date;
}
}

@@ -85,0 +306,0 @@ };

63

lib/validator.js

@@ -35,4 +35,6 @@ //TODO: i18n

}
error(msg) {
throw new Error(msg);
error(data) {
let err = new Error();
err.validate = data;
throw err;
}

@@ -45,3 +47,3 @@ /**

for (let k in this.rules) {
if (this.rules.hasOwnProperty(k) && !_.isEmptyObject(data[k])) {
if (_.isNumber(data[k]) || this.rules.hasOwnProperty(k) && !_.isEmptyObject(data[k])) {
res[k] = data[k];

@@ -205,3 +207,6 @@ }

if (_.isEmpty(v)) {
this.error(`${k} 字段必填!`);
this.error({
filed: k,
key: 'required'
});
}

@@ -211,3 +216,7 @@ }

if (!this.isInt(v)) {
this.error(`${v} 不是整数!`);
this.error({
filed: k,
key: 'int',
value: v
});
}

@@ -218,3 +227,7 @@ data[k] = parseInt(v);

if (!this.isFloat(v)) {
this.error(`${v}不是有效的小数!`);
this.error({
filed: k,
key: 'float',
value: v
});
}

@@ -229,3 +242,8 @@ data[k] = parseFloat(v);

if (v.length < rule.min && v.length > rule.max) {
this.error(`${v} 长度不在[${rule.length.min},${rule.length.max}]之间`);
this.error({
filed: k,
key: 'length',
value: v,
rule: rule.length
});
}

@@ -235,3 +253,7 @@ }

if (!this.isEmail(v)) {
this.error(`${v} 不是有效的邮箱!`);
this.error({
filed: k,
key: 'email',
value: v
});
}

@@ -241,3 +263,7 @@ }

if (!this.isUrl(v)) {
this.error(`${v} 不是有效的url!`);
this.error({
filed: k,
key: 'url',
value: v
});
}

@@ -253,3 +279,8 @@ }

if (-1 == rule.in.indexOf(v)) {
this.error(`${v} 不是${rule.in.join(',')}中的枚举类型!`);
this.error({
filed: k,
key: 'in',
value: v,
rule: rule.in
});
}

@@ -263,3 +294,7 @@ }

} else {
this.error(`${v} 不是有效的boolean类型!`);
this.error({
filed: k,
key: 'boolean',
value: v
});
}

@@ -269,3 +304,7 @@ }

if (!this.isDate(v)) {
this.error('date');
this.error({
filed: k,
key: 'date',
value: v
});
} else {

@@ -272,0 +311,0 @@ data[k] = moment(v).toISOString();

2

package.json
{
"name": "utils2",
"version": "1.0.1",
"version": "1.0.2",
"description": "validator,_,IO,string,date,numer,array",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -1,7 +0,25 @@

# 模块功能说明
**安装方法: npm install utils2 -S**
### 使用方式
```
const Validator = require('utils2/lib/validator');
const validator = new Validator({
rules: {
id: 'required|int'
}
});
const input = validator.filter(req.body);
try {
validator.check(input);
} catch(err) {
// 错误处理
//res.validateError(err);
//next(err);
}
```
### 模块功能说明
```
工具库:基本IO操作的封装;validator是对表单输入的数据进行过滤和验证的封装;仿lodash方法的封装(有些写法不习惯,所以自己造轮子)
基本对象的方法拓展(string/number/date等,风险有点大.有次改了object的原型造成sequelize报错)
```
**安装方法: npm install utils2 -s**
#### 2017-12-18 20:34:42

@@ -27,2 +45,8 @@ ```

```
### 2018-1-16 12:55:51
```
1.对基础对象的拓展都放到_.js中
2.修改validator抛出错误的方式
3.发布到npm
```

@@ -25,2 +25,26 @@ const assert = require('assert');

});
it('filter() 实际中遇到的问题', function () {
let v1 = new Validator({
rules: {
filename: 'required|string|min:1',
path: 'required|string',
size: 'required|int|min:0',
md5: 'required|string|length:32',
time: 'required|date'
}
});
const t = Date.now().toLocaleString();
let input = v1.filter({
filename: 'test.png',
path: 'upload/images/',
size: 123,
time: t
});
assert.deepEqual(input, {
filename: 'test.png',
path: 'upload/images/',
size: 123,
time: t
});
});
});

@@ -27,3 +27,3 @@ const assert = require('assert');

email: '1439120442@qq.com',
people: '6',
people: 6,
money: '122.5',

@@ -30,0 +30,0 @@ hex: 'sql'

const assert = require('assert');
const Validator = require('../../lib/validator');
describe('validator测试:', function(){
it('isID:(是否是身份证)', function(){
describe('validator测试:', function () {
it('isID:(是否是身份证)', function () {
const ids = [

@@ -15,7 +15,7 @@ '441624198412027166',

];
ids.forEach(function(v){
ids.forEach(function (v) {
assert.strictEqual(new Validator().isID(v), true);
});
});
it('isCredit:(是否是银行卡)', function(){
it('isCredit:(是否是银行卡)', function () {
const cards = [

@@ -25,7 +25,7 @@ '6227612145830440',

];
cards.forEach(function(v){
cards.forEach(function (v) {
assert.strictEqual(new Validator().isCredit(v), true);
});
});
it('isUrl()', function(){
it('isUrl()', function () {
let u1 = 'https://www.baidu.com/s?wd=nodejs%20assert%E6%96%B9%E6%B3%95&rsv_spt=1&rsv_iqid=0xfbbe6fec00021978&issp=1&f=3&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&oq=assert%25E6%2596%25B9%25E6%25B3%2595&rsv_t=cc5feos7yh9LZVkbxGG3G1hlNTVU9bUX5f50r31P0JyLAU67ndhGTGybKRgK%2Bob93OHi&inputT=1474&rsv_pq=c26916bb0000566c&rsv_sug3=20&rsv_sug1=8&rsv_sug7=100&rsv_sug2=0&prefixsug=nodejs%2520assert%25E6%2596%25B9%25E6%25B3%2595&rsp=0&rsv_sug4=3682';

@@ -35,8 +35,20 @@ assert.strictEqual(new Validator().isUrl(u1), true);

});
it('isDate()', function(){
it('isDate()', function () {
let u1 = '2017-12-19 21:59:58';
assert.strictEqual(new Validator().isDate(u1), true);
assert.strictEqual(new Validator().isDate('u1'), false);
});
it('test error', function () {
let v = new Validator({
rules: {
size: 'required|int'
}
});
try {
v.check({ size: 'a' });
} catch (err) {
console.log(err);
}
});
});
SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc