Skip to content

Commit

Permalink
Merge pull request #711 from linkinmedo/ishash
Browse files Browse the repository at this point in the history
add isHash validator
  • Loading branch information
chriso authored Sep 9, 2017
2 parents c6c6c81 + 58b7558 commit cf0010c
Show file tree
Hide file tree
Showing 8 changed files with 211 additions and 1 deletion.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ Validator | Description
**isFloat(str [, options])** | check if the string is a float.<br/><br/>`options` is an object which can contain the keys `min`, `max`, `gt`, and/or `lt` to validate the float is within boundaries (e.g. `{ min: 7.22, max: 9.55 }`). `min` and `max` are equivalent to 'greater or equal' and 'less or equal', respectively while `gt` and `lt` are their strict counterparts.
**isFullWidth(str)** | check if the string contains any full-width chars.
**isHalfWidth(str)** | check if the string contains any half-width chars.
**isHash(str, algorithm)** | check if the string is a hash of type algorithm.<br/><br/>Algorithm is one of `['md4', 'md5', 'sha1', 'sha256', 'sha384', 'sha512', 'ripemd128', 'ripemd160', 'tiger128', 'tiger160', 'tiger192', 'crc32', 'crc32b']`
**isHexColor(str)** | check if the string is a hexadecimal color.
**isHexadecimal(str)** | check if the string is a hexadecimal number.
**isIP(str [, version])** | check if the string is an IP (version 4 or 6).
Expand Down
5 changes: 5 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,10 @@ var _isMD = require('./lib/isMD5');

var _isMD2 = _interopRequireDefault(_isMD);

var _isHash = require('./lib/isHash');

var _isHash2 = _interopRequireDefault(_isHash);

var _isJSON = require('./lib/isJSON');

var _isJSON2 = _interopRequireDefault(_isJSON);
Expand Down Expand Up @@ -294,6 +298,7 @@ var validator = {
isHexColor: _isHexColor2.default,
isISRC: _isISRC2.default,
isMD5: _isMD2.default,
isHash: _isHash2.default,
isJSON: _isJSON2.default,
isEmpty: _isEmpty2.default,
isLength: _isLength2.default,
Expand Down
35 changes: 35 additions & 0 deletions lib/isHash.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
'use strict';

Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = isHash;

var _assertString = require('./util/assertString');

var _assertString2 = _interopRequireDefault(_assertString);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var lengths = {
md5: 32,
md4: 32,
sha1: 40,
sha256: 64,
sha384: 96,
sha512: 128,
ripemd128: 32,
ripemd160: 40,
tiger128: 32,
tiger160: 40,
tiger192: 48,
crc32: 8,
crc32b: 8
};

function isHash(str, algorithm) {
(0, _assertString2.default)(str);
var hash = new RegExp('^[a-f0-9]{' + lengths[algorithm] + '}$');
return hash.test(str);
}
module.exports = exports['default'];
2 changes: 2 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import isHexColor from './lib/isHexColor';
import isISRC from './lib/isISRC';

import isMD5 from './lib/isMD5';
import isHash from './lib/isHash';

import isJSON from './lib/isJSON';
import isEmpty from './lib/isEmpty';
Expand Down Expand Up @@ -121,6 +122,7 @@ const validator = {
isHexColor,
isISRC,
isMD5,
isHash,
isJSON,
isEmpty,
isLength,
Expand Down
23 changes: 23 additions & 0 deletions src/lib/isHash.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import assertString from './util/assertString';

const lengths = {
md5: 32,
md4: 32,
sha1: 40,
sha256: 64,
sha384: 96,
sha512: 128,
ripemd128: 32,
ripemd160: 40,
tiger128: 32,
tiger160: 40,
tiger192: 48,
crc32: 8,
crc32b: 8,
};

export default function isHash(str, algorithm) {
assertString(str);
const hash = new RegExp(`^[a-f0-9]{${lengths[algorithm]}}$`);
return hash.test(str);
}
121 changes: 121 additions & 0 deletions test/validators.js
Original file line number Diff line number Diff line change
Expand Up @@ -1703,6 +1703,127 @@ describe('Validators', function () {
});
});

it('should validate hash strings', function () {
test({
validator: 'isHash',
args: ['md5', 'md4', 'ripemd128', 'tiger128'],
valid: [
'd94f3f016ae679c3008de268209132f2',
'751adbc511ccbe8edf23d486fa4581cd',
'88dae00e614d8f24cfd5a8b3f8002e93',
'0bf1c35032a71a14c2f719e5a14c1e96',
],
invalid: [
'KYT0bf1c35032a71a14c2f719e5a14c1',
'q94375dj93458w34',
'39485729348',
'%&FHKJFvk',
],
});
test({
validator: 'isHash',
args: ['crc32', 'crc32b'],
valid: [
'd94f3f01',
'751adbc5',
'88dae00e',
'0bf1c350',
],
invalid: [
'KYT0bf1c35032a71a14c2f719e5a14c1',
'q94375dj93458w34',
'q943',
'39485729348',
'%&FHKJFvk',
],
});
test({
validator: 'isHash',
args: ['sha1', 'tiger160', 'ripemd160'],
valid: [
'3ca25ae354e192b26879f651a51d92aa8a34d8d3',
'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d',
'beb8c3f30da46be179b8df5f5ecb5e4b10508230',
'efd5d3b190e893ed317f38da2420d63b7ae0d5ed',
],
invalid: [
'KYT0bf1c35032a71a14c2f719e5a14c1',
'KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk',
'q94375dj93458w34',
'39485729348',
'%&FHKJFvk',
],
});
test({
validator: 'isHash',
args: ['sha256'],
valid: [
'2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824',
'1d996e033d612d9af2b44b70061ee0e868bfd14c2dd90b129e1edeb7953e7985',
'80f70bfeaed5886e33536bcfa8c05c60afef5a0e48f699a7912d5e399cdcc441',
'579282cfb65ca1f109b78536effaf621b853c9f7079664a3fbe2b519f435898c',
],
invalid: [
'KYT0bf1c35032a71a14c2f719e5a14c1',
'KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk',
'q94375dj93458w34',
'39485729348',
'%&FHKJFvk',
],
});
test({
validator: 'isHash',
args: ['sha384'],
valid: [
'3fed1f814d28dc5d63e313f8a601ecc4836d1662a19365cbdcf6870f6b56388850b58043f7ebf2418abb8f39c3a42e31',
'b330f4e575db6e73500bd3b805db1a84b5a034e5d21f0041d91eec85af1dfcb13e40bb1c4d36a72487e048ac6af74b58',
'bf547c3fc5841a377eb1519c2890344dbab15c40ae4150b4b34443d2212e5b04aa9d58865bf03d8ae27840fef430b891',
'fc09a3d11368386530f985dacddd026ae1e44e0e297c805c3429d50744e6237eb4417c20ffca8807b071823af13a3f65',
],
invalid: [
'KYT0bf1c35032a71a14c2f719e5a14c1',
'KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk',
'q94375dj93458w34',
'39485729348',
'%&FHKJFvk',
],
});
test({
validator: 'isHash',
args: ['sha512'],
valid: [
'9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043',
'83c586381bf5ba94c8d9ba8b6b92beb0997d76c257708742a6c26d1b7cbb9269af92d527419d5b8475f2bb6686d2f92a6649b7f174c1d8306eb335e585ab5049',
'45bc5fa8cb45ee408c04b6269e9f1e1c17090c5ce26ffeeda2af097735b29953ce547e40ff3ad0d120e5361cc5f9cee35ea91ecd4077f3f589b4d439168f91b9',
'432ac3d29e4f18c7f604f7c3c96369a6c5c61fc09bf77880548239baffd61636d42ed374f41c261e424d20d98e320e812a6d52865be059745fdb2cb20acff0ab',
],
invalid: [
'KYT0bf1c35032a71a14c2f719e5a14c1',
'KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk',
'q94375dj93458w34',
'39485729348',
'%&FHKJFvk',
],
});
test({
validator: 'isHash',
args: ['tiger192'],
valid: [
'6281a1f098c5e7290927ed09150d43ff3990a0fe1a48267c',
'56268f7bc269cf1bc83d3ce42e07a85632394737918f4760',
'46fc0125a148788a3ac1d649566fc04eb84a746f1a6e4fa7',
'7731ea1621ae99ea3197b94583d034fdbaa4dce31a67404a',
],
invalid: [
'KYT0bf1c35032a71a14c2f719e5a14c1',
'KYT0bf1c35032a71a14c2f719e5a14c1dsjkjkjkjkkjk',
'q94375dj93458w34',
'39485729348',
'%&FHKJFvk',
],
});
});

it('should validate null strings', function () {
test({
validator: 'isEmpty',
Expand Down
23 changes: 23 additions & 0 deletions validator.js
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,28 @@ function isMD5(str) {
return md5.test(str);
}

var lengths = {
md5: 32,
md4: 32,
sha1: 40,
sha256: 64,
sha384: 96,
sha512: 128,
ripemd128: 32,
ripemd160: 40,
tiger128: 32,
tiger160: 40,
tiger192: 48,
crc32: 8,
crc32b: 8
};

function isHash(str, algorithm) {
assertString(str);
var hash = new RegExp('^[a-f0-9]{' + lengths[algorithm] + '}$');
return hash.test(str);
}

function isJSON(str) {
assertString(str);
try {
Expand Down Expand Up @@ -1365,6 +1387,7 @@ var validator = {
isHexColor: isHexColor,
isISRC: isISRC,
isMD5: isMD5,
isHash: isHash,
isJSON: isJSON,
isEmpty: isEmpty,
isLength: isLength,
Expand Down
2 changes: 1 addition & 1 deletion validator.min.js

Large diffs are not rendered by default.

0 comments on commit cf0010c

Please sign in to comment.