diff --git a/src/predicate/isNumericString.ts b/src/predicate/isNumericString.ts index 1354a9b..b067793 100644 --- a/src/predicate/isNumericString.ts +++ b/src/predicate/isNumericString.ts @@ -2,4 +2,4 @@ import { matching } from './factory/matching.js'; import type { NumericString } from '../types/common.js'; -export const isNumericString = matching(/^[-+]?\d+(\.\d+)?$/); +export const isNumericString = matching(/^[-+]?(\d+(\.\d+)?|\.\d+)$/); diff --git a/test/predicate/isNumericString.test.ts b/test/predicate/isNumericString.test.ts new file mode 100644 index 0000000..dfcc692 --- /dev/null +++ b/test/predicate/isNumericString.test.ts @@ -0,0 +1,20 @@ +import { describe, it, expect } from 'vitest'; + +import { isNumericString } from '../../src/predicate/isNumericString.js'; + +describe('isNumericString()', () => { + it.each(['1', '2.3', '-4', '+5.67', '.89', '-0', '+0'])('Returns true for valid input: %s', (input) => { + expect(isNumericString(input)).toBeTruthy(); + }); + + it.each(['', 'not numeric', Symbol('test'), null, undefined, Number.MAX_SAFE_INTEGER])( + 'Returns false for invalid input: %s', + (input) => { + expect(isNumericString(input)).toBeFalsy(); + }, + ); + + it('Can be used with Array.filter()', () => { + expect(['1', null, 2, undefined, '3.14'].filter(isNumericString)).toEqual(['1', '3.14']); + }); +});