Compare commits

...
Author SHA1 Message Date
Railly Hugoandvitalii.semianchuk 9ba52110b9 fix(core): reject partial and empty numeric strings
parseFloat accepted "123abc" as 123, and Number() alone treats "" and whitespace as 0. Require a non-empty string that Number() parses fully.

Co-Authored-By: vitalii.semianchuk <fix20152@gmail.com>
2026-10-07 14:01:14 -03:00
2 changed files with 13 additions and 1 deletions
+10
View File
@@ -152,6 +152,16 @@ describe("builtInValidationFunctions", () => {
expect(builtInValidationFunctions.numeric(NaN)).toBe(false);
expect(builtInValidationFunctions.numeric(null)).toBe(false);
});
it("fails for strings with trailing non-numeric characters", () => {
expect(builtInValidationFunctions.numeric("123abc")).toBe(false);
expect(builtInValidationFunctions.numeric("99bottles")).toBe(false);
});
it("fails for empty and whitespace-only strings", () => {
expect(builtInValidationFunctions.numeric("")).toBe(false);
expect(builtInValidationFunctions.numeric(" ")).toBe(false);
});
});
describe("url", () => {
+3 -1
View File
@@ -153,7 +153,9 @@ export const builtInValidationFunctions: Record<string, ValidationFunction> = {
*/
numeric: (value: unknown) => {
if (typeof value === "number") return !isNaN(value);
if (typeof value === "string") return !isNaN(parseFloat(value));
if (typeof value === "string") {
return value.trim() !== "" && !isNaN(Number(value));
}
return false;
},