diff --git a/README.md b/README.md index b3dd81ddd..1d20ba929 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,7 @@ Sanitizer | Description **trim(input [, chars])** | trim characters (whitespace by default) from both sides of the input. **whitelist(input, chars)** | remove characters that do not appear in the whitelist. The characters are used in a RegExp and so you will need to escape some chars, e.g. `whitelist(input, '\\[\\]')`. **isSlug** | Check if the string is of type slug. `Options` allow a single hyphen between string. e.g. [`cn-cn`, `cn-c-c`] +**isDate** | Check whether the string is a date ### XSS Sanitization diff --git a/index.js b/index.js index 13e7907ef..6b37f7d6f 100644 --- a/index.js +++ b/index.js @@ -65,6 +65,8 @@ var _isDecimal = _interopRequireDefault(require("./lib/isDecimal")); var _isHexadecimal = _interopRequireDefault(require("./lib/isHexadecimal")); +var _isOctal = _interopRequireDefault(require("./lib/isOctal")); + var _isDivisibleBy = _interopRequireDefault(require("./lib/isDivisibleBy")); var _isHexColor = _interopRequireDefault(require("./lib/isHexColor")); @@ -155,7 +157,11 @@ var _normalizeEmail = _interopRequireDefault(require("./lib/normalizeEmail")); var _isSlug = _interopRequireDefault(require("./lib/isSlug")); -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } +var _isDate = _interopRequireDefault(require("./lib/isDate")); + +function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -196,6 +202,7 @@ var validator = { isFloatLocales: _isFloat.locales, isDecimal: _isDecimal.default, isHexadecimal: _isHexadecimal.default, + isOctal: _isOctal.default, isDivisibleBy: _isDivisibleBy.default, isHexColor: _isHexColor.default, isISRC: _isISRC.default, @@ -242,7 +249,8 @@ var validator = { isWhitelisted: _isWhitelisted.default, normalizeEmail: _normalizeEmail.default, toString: toString, - isSlug: _isSlug.default + isSlug: _isSlug.default, + isDate: _isDate.default }; var _default = validator; exports.default = _default; diff --git a/lib/isDate.js b/lib/isDate.js new file mode 100644 index 000000000..67d728395 --- /dev/null +++ b/lib/isDate.js @@ -0,0 +1,18 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = isDate; + +var _assertString = _interopRequireDefault(require("./util/assertString")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function isDate(str) { + (0, _assertString.default)(str); + return (new Date(str) !== 'Invalid Date') && !isNaN(new Date(str)); +} + +module.exports = exports.default; +module.exports.default = exports.default; \ No newline at end of file diff --git a/src/index.js b/src/index.js index 04f60149d..e9caf68e4 100644 --- a/src/index.js +++ b/src/index.js @@ -99,6 +99,7 @@ import isWhitelisted from './lib/isWhitelisted'; import normalizeEmail from './lib/normalizeEmail'; import isSlug from './lib/isSlug'; +import isDate from './lib/isDate'; const version = '11.1.0'; @@ -186,6 +187,7 @@ const validator = { normalizeEmail, toString, isSlug, + isDate, }; export default validator; diff --git a/src/lib/isDate.js b/src/lib/isDate.js new file mode 100644 index 000000000..713a6507b --- /dev/null +++ b/src/lib/isDate.js @@ -0,0 +1,6 @@ +import assertString from './util/assertString'; + +export default function isDate(str) { + assertString(str); + return (new Date(str) !== 'Invalid Date') && !isNaN(new Date(str)); +} diff --git a/test/validators.js b/test/validators.js index e86c36201..6dcd3f09e 100644 --- a/test/validators.js +++ b/test/validators.js @@ -7079,4 +7079,19 @@ describe('Validators', () => { ], }); }); + + it('should validate that the string is a date or not', () => { + test({ + validator: 'isDate', + args: ['any'], + valid: ['10-11-2009', '10/11/2009', '2009-11-10T07:00:00+0000'], + invalid: [ + 'gdgfdg', + '1000033', + 'ccxzcz', + 'foo', + '', + ], + }); + }); }); diff --git a/validator.js b/validator.js index defa7d437..01ad85367 100644 --- a/validator.js +++ b/validator.js @@ -2035,6 +2035,11 @@ function isSlug(str) { return charsetRegex.test(str); } +function isDate(str) { + assertString(str); + return (new Date(str) !== 'Invalid Date') && !isNaN(new Date(str)); +} + var version = '11.1.0'; var validator = { version: version, @@ -2118,7 +2123,8 @@ var validator = { isWhitelisted: isWhitelisted, normalizeEmail: normalizeEmail, toString: toString, - isSlug: isSlug + isSlug: isSlug, + isDate: isDate }; return validator;