From 8511ade6b62cc418374fb02b43c523e4f1e71e3d Mon Sep 17 00:00:00 2001 From: GerardoAGL96 Date: Tue, 14 Jul 2020 08:23:50 -0400 Subject: [PATCH 1/3] Support for string and numbers in isValidNumber function --- README.md | 6 ++++-- src/__tests__/test.ts | 2 ++ src/index.ts | 8 ++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 001ac4d..444445e 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ console.log(isValidEmail('jhondoe@gmail.com')); // true ### `isValidNumber(value, allowZero, allowNegative)` -- Validates if a value of type string is a valid number +- Validates if a value of type string or number is a valid number - If allowZero equals true, '0' would return true - If allowNegative equals true, negative values would return true @@ -92,11 +92,13 @@ console.log(isValidNumber('123a424', true, true)); // false console.log(isValidNumber('123a424', false, true)); // false console.log(isValidNumber('1.23a424', false, true)); // false console.log(isValidNumber('123-424', false, true)); // false -console.log(isValidNumber('0')); // false +console.log(isValidNumber('0')); // false console.log(isValidNumber('0', true)); // true console.log(isValidNumber('-1', true, true)); // true console.log(isValidNumber('201')); // true console.log(isValidNumber('3.14159')); // true +console.log(isValidNumber(452)); // true +console.log(isValidNumber(3.1459)); // true ``` diff --git a/src/__tests__/test.ts b/src/__tests__/test.ts index e391287..4e89d00 100644 --- a/src/__tests__/test.ts +++ b/src/__tests__/test.ts @@ -58,6 +58,8 @@ test('isValidNumber', () => { expect(isValidNumber('-1', true, true)).toBe(true); expect(isValidNumber('201')).toBe(true); expect(isValidNumber('3.14159')).toBe(true); + expect(isValidNumber(452)).toBe(true); + expect(isValidNumber(3.1459)).toBe(true); }); test('isValidInteger', () => { diff --git a/src/index.ts b/src/index.ts index 3acef93..9d939da 100644 --- a/src/index.ts +++ b/src/index.ts @@ -57,19 +57,19 @@ export const isValidEmail = (email: string): boolean => { /** * Validate if a string is a valid number. * - * @param {string} stringToTest - The string to validate as a number. + * @param {string|number} value - The string to validate as a number. * @param {boolean} [allowZero=false] - If the string should accept 0 as a valid number. * @param {boolean} [allowNegative=false] - If the string should negative values. * * @returns {boolean} If the string is valid number or not. */ -export const isValidNumber = (stringToTest: string, allowZero: boolean = false, allowNegative: boolean = false): boolean => { +export const isValidNumber = (value: string|number, allowZero: boolean = false, allowNegative: boolean = false): boolean => { const regExp = /^(-?[0-9]+)((\.|,)[0-9]+)?$/; - if (!regExp.test(stringToTest)) + if (typeof value === 'string' && !regExp.test(value)) return false; - const numberToTest = parseInt(stringToTest, 10); + const numberToTest = parseInt(value.toString(), 10); if (isNaN(numberToTest) || typeof numberToTest !== 'number') return false; From 3901b006b8489c72b3597f5557e7bfb4d4653e53 Mon Sep 17 00:00:00 2001 From: GerardoAGL96 Date: Tue, 14 Jul 2020 08:35:11 -0400 Subject: [PATCH 2/3] Package version updated to 0.0.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 138a7d9..24376a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cobuildlab/validation-utils", - "version": "0.0.3", + "version": "0.0.4", "description": "This is package to deal with common scenarios working with Javascript validations", "main": "lib/index.js", "types": "./lib/index.d.ts", From 0a65ce48f5ac5b4e1261bc637055d1e6d6e910ea Mon Sep 17 00:00:00 2001 From: GerardoAGL96 Date: Thu, 16 Jul 2020 17:17:30 -0400 Subject: [PATCH 3/3] isStringAValidNumber validation added --- package-lock.json | 2 +- src/__tests__/test.ts | 15 ++++++++++++--- src/index.ts | 26 +++++++++++++++++++++----- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index e9593da..8781bb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@cobuildlab/validation-utils", - "version": "0.0.2", + "version": "0.0.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/__tests__/test.ts b/src/__tests__/test.ts index 4e89d00..e4bb8d2 100644 --- a/src/__tests__/test.ts +++ b/src/__tests__/test.ts @@ -4,7 +4,8 @@ import { isValidEmail, isValidNumber, isValidInteger, - isValidDate + isValidDate, + isStringAValidNumber } from '../index'; test('isNullOrUndefined:', () => { @@ -58,8 +59,6 @@ test('isValidNumber', () => { expect(isValidNumber('-1', true, true)).toBe(true); expect(isValidNumber('201')).toBe(true); expect(isValidNumber('3.14159')).toBe(true); - expect(isValidNumber(452)).toBe(true); - expect(isValidNumber(3.1459)).toBe(true); }); test('isValidInteger', () => { @@ -81,4 +80,14 @@ test('isValidDate', () => { expect(isValidDate('2020-06-26', 'YYYY-MM-DD')).toBe(true); expect(isValidDate('Mar 25 2015', 'MMM DD YYYY')).toBe(true); expect(isValidDate('Tue Mar 24 2015 19:30:00', 'ddd MMM DD YYY HH:mm:ss')).toBe(true); +}) + +test('isStringAValidNumber', () => { + expect(isStringAValidNumber('')).toBe(false); + expect(isStringAValidNumber('Some string')).toBe(false); + expect(isStringAValidNumber('04939-343.643')).toBe(false); + + expect(isStringAValidNumber('2020')).toBe(true); + expect(isStringAValidNumber('5731')).toBe(true); + expect(isStringAValidNumber('3.1415')).toBe(true); }) \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 9d939da..d6929de 100644 --- a/src/index.ts +++ b/src/index.ts @@ -57,19 +57,19 @@ export const isValidEmail = (email: string): boolean => { /** * Validate if a string is a valid number. * - * @param {string|number} value - The string to validate as a number. + * @param {string} value - The string to validate as a number. * @param {boolean} [allowZero=false] - If the string should accept 0 as a valid number. * @param {boolean} [allowNegative=false] - If the string should negative values. * * @returns {boolean} If the string is valid number or not. */ -export const isValidNumber = (value: string|number, allowZero: boolean = false, allowNegative: boolean = false): boolean => { +export const isValidNumber = (value: string, allowZero: boolean = false, allowNegative: boolean = false): boolean => { const regExp = /^(-?[0-9]+)((\.|,)[0-9]+)?$/; - if (typeof value === 'string' && !regExp.test(value)) + if (!regExp.test(value)) return false; - const numberToTest = parseInt(value.toString(), 10); + const numberToTest = parseInt(value, 10); if (isNaN(numberToTest) || typeof numberToTest !== 'number') return false; @@ -112,4 +112,20 @@ export const isValidDate = (date: string, format?: string): boolean => { return moment(date).isValid(); return moment(date, format, true).isValid(); -}; \ No newline at end of file +}; + +/** + * Validate if the provided string is a valid number + * + * @param {string} value - The value to check + * + * @returns {boolean} Returns if the specified value is a valid number or not + */ +export const isStringAValidNumber = (value: string) => { + if (value === '') + return false; + + const number = Number(value); + + return Number.isNaN(number) ? false : true; +} \ No newline at end of file