From d33ce96d185b3d7ca613ac2c6f233a95f3b8c93b Mon Sep 17 00:00:00 2001 From: Sebastian Seedorf Date: Tue, 26 May 2020 20:35:54 +0200 Subject: [PATCH] NaN option --- validators/number.test.ts | 4 ++++ validators/number.ts | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/validators/number.test.ts b/validators/number.test.ts index d198946..3b21fef 100644 --- a/validators/number.test.ts +++ b/validators/number.test.ts @@ -19,6 +19,7 @@ Deno.test("isNumber (match)", async () => { for (const value of values) { assertEquals(await validate(value, isNumber()), []); } + assertEquals(await validate(NaN, isNumber({ allowNaN: true })), []); }); Deno.test("isNumber (no match)", async () => { @@ -35,6 +36,7 @@ Deno.test("isNumber (no match)", async () => { for (const value of values) { assertNotEquals(await validate(value, isNumber()), []); } + assertNotEquals(await validate(NaN, isNumber({ allowNaN: false })), []); }); Deno.test("isInteger (match)", async () => { @@ -49,6 +51,7 @@ Deno.test("isInteger (match)", async () => { for (const value of values) { assertEquals(await validate(value, isInteger()), []); } + assertEquals(await validate(NaN, isInteger({ allowNaN: true })), []); }); Deno.test("isInteger (no match)", async () => { @@ -66,4 +69,5 @@ Deno.test("isInteger (no match)", async () => { for (const value of values) { assertNotEquals(await validate(value, isInteger()), []); } + assertNotEquals(await validate(NaN, isInteger({ allowNaN: false })), []); }); diff --git a/validators/number.ts b/validators/number.ts index cc192d0..45c570e 100644 --- a/validators/number.ts +++ b/validators/number.ts @@ -1,10 +1,13 @@ import { Validator, Args } from "../mod.ts"; -export function isNumber(): Validator { +export function isNumber( + { allowNaN = false }: { allowNaN?: boolean } = {}, +): Validator { return { type: "isNumber", check: (value: any) => { if (value === null || value === undefined) return; + if (allowNaN && Number.isNaN(value)) return; if (!Number.isFinite(value)) { return {}; } @@ -15,11 +18,14 @@ export function isNumber(): Validator { }; } -export function isInteger(): Validator { +export function isInteger( + { allowNaN = false }: { allowNaN?: boolean } = {}, +): Validator { return { type: "isInteger", check: (value: any) => { if (value === null || value === undefined) return; + if (allowNaN && Number.isNaN(value)) return; if (!Number.isInteger(value)) { return {}; }