You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

strnum

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

strnum - npm Package Compare versions

Comparing version
2.1.2
to
2.2.0
+18
tests/infinity_test.js
import toNumber from "../strnum.js";
describe("Should convert all the valid numeric strings to number", () => {
it("should return infinity as per user option", () => {
expect(toNumber("1e1000", { infinity: "original" })).toEqual("1e1000");
expect(toNumber("1e1000", { infinity: "null" })).toEqual(null);
expect(toNumber("1e1000", { infinity: "infinity" })).toEqual(Infinity);
expect(toNumber("1e1000", { infinity: "string" })).toEqual("Infinity");
expect(toNumber("-1e1000", { infinity: "original" })).toEqual("-1e1000");
expect(toNumber("-1e1000", { infinity: "null" })).toEqual(null);
expect(toNumber("-1e1000", { infinity: "infinity" })).toEqual(-Infinity);
expect(toNumber("-1e1000", { infinity: "string" })).toEqual("-Infinity");
expect(toNumber("1e309")).toEqual("1e309");
});
});
import toNumber from "../strnum.js";
describe("Should convert all the valid numeric strings to number", () => {
it("should return undefined, null, empty string, or non-numeric as it is", () => {
expect(toNumber(undefined)).not.toBeDefined();
expect(toNumber(null)).toEqual(null);
expect(toNumber("")).toEqual("");
expect(toNumber("string")).toEqual("string");
expect(toNumber("e89794659669cb7bb967db73a7ea6889c3891727")).toEqual("e89794659669cb7bb967db73a7ea6889c3891727");
});
it("should not parse number with spaces or comma", () => {
expect(toNumber("12,12")).toEqual("12,12");
expect(toNumber("12 12")).toEqual("12 12");
expect(toNumber("12-12")).toEqual("12-12");
expect(toNumber("12.12.12")).toEqual("12.12.12");
})
it("should consider + sign", () => {
expect(toNumber("+12")).toEqual(12);
expect(toNumber("+ 12")).toEqual("+ 12");
expect(toNumber("12+12")).toEqual("12+12");
expect(toNumber("1212+")).toEqual("1212+");
})
it("should parse hexadecimal values", () => {
expect(toNumber("0x2f")).toEqual(47);
expect(toNumber("-0x2f")).toEqual(-47);
expect(toNumber("0x2f", { hex: true })).toEqual(47);
expect(toNumber("-0x2f", { hex: true })).toEqual(-47);
expect(toNumber("0x2f", { hex: false })).toEqual("0x2f");
expect(toNumber("-0x2f", { hex: false })).toEqual("-0x2f");
})
it("should not parse strings with 0x embedded", () => {
expect(toNumber("0xzz")).toEqual("0xzz");
expect(toNumber("iweraf0x123qwerqwer")).toEqual("iweraf0x123qwerqwer");
expect(toNumber("1230x55")).toEqual("1230x55");
expect(toNumber("JVBERi0xLjMNCiXi48")).toEqual("JVBERi0xLjMNCiXi48");
})
it("leading zeros", () => {
expect(toNumber("0")).toEqual(0);
expect(toNumber("00")).toEqual(0);
expect(toNumber("00.0")).toEqual(0);
expect(toNumber("0", { leadingZeros: false })).toEqual(0);
expect(toNumber("00", { leadingZeros: false })).toEqual("00");
expect(toNumber("00.0", { leadingZeros: false })).toEqual("00.0");
expect(toNumber("06")).toEqual(6);
expect(toNumber("06", { leadingZeros: true })).toEqual(6);
expect(toNumber("06", { leadingZeros: false })).toEqual("06");
expect(toNumber("006")).toEqual(6);
expect(toNumber("006", { leadingZeros: true })).toEqual(6);
expect(toNumber("006", { leadingZeros: false })).toEqual("006");
expect(toNumber("000000000000000000000000017717", { leadingZeros: false })).toEqual("000000000000000000000000017717");
expect(toNumber("000000000000000000000000017717", { leadingZeros: true })).toEqual(17717);
expect(toNumber("020211201030005811824")).toEqual("020211201030005811824");
expect(toNumber("0420926189200190257681175017717")).toEqual(4.209261892001902e+29);
})
it("invalid floating number", () => {
expect(toNumber("20.21.030")).toEqual("20.21.030");
expect(toNumber("0.21.030")).toEqual("0.21.030");
expect(toNumber("0.21.")).toEqual("0.21.");
});
it("floating point and leading zeros", () => {
expect(toNumber("0.")).toEqual(0);
expect(toNumber("+0.")).toEqual(0);
expect(toNumber("-0.")).toEqual(-0);
expect(toNumber("1.")).toEqual(1);
expect(toNumber("00.00")).toEqual(0);
expect(toNumber("0.06")).toEqual(0.06);
expect(toNumber("00.6")).toEqual(0.6);
expect(toNumber(".006")).toEqual(0.006);
expect(toNumber("6.0")).toEqual(6);
expect(toNumber("06.0")).toEqual(6);
expect(toNumber("0.0", { leadingZeros: false })).toEqual(0);
expect(toNumber("00.00", { leadingZeros: false })).toEqual("00.00");
expect(toNumber("0.06", { leadingZeros: false })).toEqual(0.06);
expect(toNumber("00.6", { leadingZeros: false })).toEqual("00.6");
expect(toNumber(".006", { leadingZeros: false })).toEqual(0.006);
expect(toNumber("6.0", { leadingZeros: false })).toEqual(6);
expect(toNumber("06.0", { leadingZeros: false })).toEqual("06.0");
})
it("negative number leading zeros", () => {
expect(toNumber("+06")).toEqual(6);
expect(toNumber("-06")).toEqual(-6);
expect(toNumber("-06", { leadingZeros: true })).toEqual(-6);
expect(toNumber("-06", { leadingZeros: false })).toEqual("-06");
expect(toNumber("-0.0")).toEqual(-0);
expect(toNumber("-00.00")).toEqual(-0);
expect(toNumber("-0.06")).toEqual(-0.06);
expect(toNumber("-00.6")).toEqual(-0.6);
expect(toNumber("-.006")).toEqual(-0.006);
expect(toNumber("-6.0")).toEqual(-6);
expect(toNumber("-06.0")).toEqual(-6);
expect(toNumber("+06.0")).toEqual(6);
expect(toNumber("-0.0", { leadingZeros: false })).toEqual(-0);
expect(toNumber("-00.00", { leadingZeros: false })).toEqual("-00.00");
expect(toNumber("-0.06", { leadingZeros: false })).toEqual(-0.06);
expect(toNumber("-00.6", { leadingZeros: false })).toEqual("-00.6");
expect(toNumber("-.006", { leadingZeros: false })).toEqual(-0.006);
expect(toNumber("-6.0", { leadingZeros: false })).toEqual(-6);
expect(toNumber("-06.0", { leadingZeros: false })).toEqual("-06.0");
})
it("long number", () => {
expect(toNumber("020211201030005811824")).toEqual("020211201030005811824");
expect(toNumber("20211201030005811824")).toEqual("20211201030005811824");
expect(toNumber("20.211201030005811824")).toEqual("20.211201030005811824");
expect(toNumber("0.211201030005811824")).toEqual("0.211201030005811824");
});
it("scientific notation", () => {
expect(toNumber("01.0e2", { leadingZeros: false })).toEqual("01.0e2");
expect(toNumber("-01.0e2", { leadingZeros: false })).toEqual("-01.0e2");
expect(toNumber("01.0e2")).toEqual(100);
expect(toNumber("-01.0e2")).toEqual(-100);
expect(toNumber("1.0e2")).toEqual(100);
expect(toNumber("-1.0e2")).toEqual(-100);
expect(toNumber("1.0e-2")).toEqual(0.01);
expect(toNumber("420926189200190257681175017717")).toEqual(4.209261892001902e+29);
expect(toNumber("420926189200190257681175017717", { eNotation: false })).toEqual("420926189200190257681175017717");
expect(toNumber("1e-2")).toEqual(0.01);
expect(toNumber("1e+2")).toEqual(100);
expect(toNumber("1.e+2")).toEqual(100);
});
it("scientific notation with upper E", () => {
expect(toNumber("01.0E2", { leadingZeros: false })).toEqual("01.0E2");
expect(toNumber("-01.0E2", { leadingZeros: false })).toEqual("-01.0E2");
expect(toNumber("01.0E2")).toEqual(100);
expect(toNumber("-01.0E2")).toEqual(-100);
expect(toNumber("1.0E2")).toEqual(100);
expect(toNumber("-1.0E2")).toEqual(-100);
expect(toNumber("1.0E-2")).toEqual(0.01);
expect(toNumber("E-2")).toEqual("E-2");
expect(toNumber("E2")).toEqual("E2");
expect(toNumber("0E2")).toEqual(0);
expect(toNumber("-0E2")).toEqual(-0);
expect(toNumber("00E2")).toEqual("00E2");
expect(toNumber("00E2", { leadingZeros: false })).toEqual("00E2");
});
it("should skip matching pattern", () => {
expect(toNumber("0", { skipLike: /.*/ })).toEqual("0");
expect(toNumber("+12", { skipLike: /\+[0-9]{10}/ })).toEqual(12);
expect(toNumber("12+12", { skipLike: /\+[0-9]{10}/ })).toEqual("12+12");
expect(toNumber("12+1212121212", { skipLike: /\+[0-9]{10}/ })).toEqual("12+1212121212");
expect(toNumber("+1212121212")).toEqual(1212121212);
expect(toNumber("+1212121212", { skipLike: /\+[0-9]{10}/ })).toEqual("+1212121212");
})
it("should not change string if not number", () => {
expect(toNumber("+12 12")).toEqual("+12 12");
expect(toNumber(" +12 12 ")).toEqual(" +12 12 ");
})
it("should ignore sorrounded spaces ", () => {
expect(toNumber(" +1212 ")).toEqual(1212);
})
it("negative numbers", () => {
expect(toNumber("+1212")).toEqual(1212);
expect(toNumber("+12.12")).toEqual(12.12);
expect(toNumber("-12.12")).toEqual(-12.12);
expect(toNumber("-012.12")).toEqual(-12.12);
expect(toNumber("-012.12")).toEqual(-12.12);
})
});
+3
-3
{
"name": "strnum",
"version": "2.1.2",
"version": "2.2.0",
"description": "Parse String to Number based on configuration",

@@ -8,3 +8,3 @@ "type": "module",

"scripts": {
"test": "jasmine strnum.test.js"
"test": "jasmine tests/*_test.js"
},

@@ -32,2 +32,2 @@ "keywords": [

}
}
}

@@ -97,2 +97,3 @@ # strnum

skipLike: /regex/ //when string should not be parsed when it matches the specified regular expression
infinity: "original", // "null", "infinity" (Infinity type), "string" ("Infinity" (the string literal))
```

@@ -99,0 +100,0 @@

+85
-59

@@ -6,5 +6,5 @@ const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;

const consider = {
hex : true,
hex: true,
// oct: false,

@@ -14,26 +14,29 @@ leadingZeros: true,

eNotation: true,
//skipLike: /regex/
//skipLike: /regex/,
infinity: "original", // "null", "infinity" (Infinity type), "string" ("Infinity" (the string literal))
};
export default function toNumber(str, options = {}){
options = Object.assign({}, consider, options );
if(!str || typeof str !== "string" ) return str;
let trimmedStr = str.trim();
if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;
else if(str==="0") return 0;
export default function toNumber(str, options = {}) {
options = Object.assign({}, consider, options);
if (!str || typeof str !== "string") return str;
let trimmedStr = str.trim();
if (options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;
else if (str === "0") return 0;
else if (options.hex && hexRegex.test(trimmedStr)) {
return parse_int(trimmedStr, 16);
// }else if (options.oct && octRegex.test(str)) {
// return Number.parseInt(val, 8);
}else if (trimmedStr.includes('e') || trimmedStr.includes('E')) { //eNotation
return resolveEnotation(str,trimmedStr,options);
// }else if (options.parseBin && binRegex.test(str)) {
// return Number.parseInt(val, 2);
}else{
// }else if (options.oct && octRegex.test(str)) {
// return Number.parseInt(val, 8);
} else if (!isFinite(trimmedStr)) { //Infinity
return handleInfinity(str, Number(trimmedStr), options);
} else if (trimmedStr.includes('e') || trimmedStr.includes('E')) { //eNotation
return resolveEnotation(str, trimmedStr, options);
// }else if (options.parseBin && binRegex.test(str)) {
// return Number.parseInt(val, 2);
} else {
//separate negative sign, leading zeros, and rest number
const match = numRegex.exec(trimmedStr);
// +00.123 => [ , '+', '00', '.123', ..
if(match){
if (match) {
const sign = match[1] || "";

@@ -43,37 +46,37 @@ const leadingZeros = match[2];

const decimalAdjacentToLeadingZeros = sign ? // 0., -00., 000.
str[leadingZeros.length+1] === "."
str[leadingZeros.length + 1] === "."
: str[leadingZeros.length] === ".";
//trim ending zeros for floating number
if(!options.leadingZeros //leading zeros are not allowed
&& (leadingZeros.length > 1
|| (leadingZeros.length === 1 && !decimalAdjacentToLeadingZeros))){
if (!options.leadingZeros //leading zeros are not allowed
&& (leadingZeros.length > 1
|| (leadingZeros.length === 1 && !decimalAdjacentToLeadingZeros))) {
// 00, 00.3, +03.24, 03, 03.24
return str;
}
else{//no leading zeros or leading zeros are allowed
else {//no leading zeros or leading zeros are allowed
const num = Number(trimmedStr);
const parsedStr = String(num);
if( num === 0) return num;
if(parsedStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation
if(options.eNotation) return num;
if (num === 0) return num;
if (parsedStr.search(/[eE]/) !== -1) { //given number is long and parsed to eNotation
if (options.eNotation) return num;
else return str;
}else if(trimmedStr.indexOf(".") !== -1){ //floating number
if(parsedStr === "0") return num; //0.0
else if(parsedStr === numTrimmedByZeros) return num; //0.456. 0.79000
else if( parsedStr === `${sign}${numTrimmedByZeros}`) return num;
} else if (trimmedStr.indexOf(".") !== -1) { //floating number
if (parsedStr === "0") return num; //0.0
else if (parsedStr === numTrimmedByZeros) return num; //0.456. 0.79000
else if (parsedStr === `${sign}${numTrimmedByZeros}`) return num;
else return str;
}
let n = leadingZeros? numTrimmedByZeros : trimmedStr;
if(leadingZeros){
let n = leadingZeros ? numTrimmedByZeros : trimmedStr;
if (leadingZeros) {
// -009 => -9
return (n === parsedStr) || (sign+n === parsedStr) ? num : str
}else {
return (n === parsedStr) || (sign + n === parsedStr) ? num : str
} else {
// +9
return (n === parsedStr) || (n === sign+parsedStr) ? num : str
return (n === parsedStr) || (n === sign + parsedStr) ? num : str
}
}
}else{ //non-numeric string
} else { //non-numeric string
return str;

@@ -85,6 +88,6 @@ }

const eNotationRegx = /^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;
function resolveEnotation(str,trimmedStr,options){
if(!options.eNotation) return str;
const notation = trimmedStr.match(eNotationRegx);
if(notation){
function resolveEnotation(str, trimmedStr, options) {
if (!options.eNotation) return str;
const notation = trimmedStr.match(eNotationRegx);
if (notation) {
let sign = notation[1] || "";

@@ -94,15 +97,15 @@ const eChar = notation[3].indexOf("e") === -1 ? "E" : "e";

const eAdjacentToLeadingZeros = sign ? // 0E.
str[leadingZeros.length+1] === eChar
str[leadingZeros.length + 1] === eChar
: str[leadingZeros.length] === eChar;
if(leadingZeros.length > 1 && eAdjacentToLeadingZeros) return str;
else if(leadingZeros.length === 1
&& (notation[3].startsWith(`.${eChar}`) || notation[3][0] === eChar)){
return Number(trimmedStr);
}else if(options.leadingZeros && !eAdjacentToLeadingZeros){ //accept with leading zeros
if (leadingZeros.length > 1 && eAdjacentToLeadingZeros) return str;
else if (leadingZeros.length === 1
&& (notation[3].startsWith(`.${eChar}`) || notation[3][0] === eChar)) {
return Number(trimmedStr);
} else if (options.leadingZeros && !eAdjacentToLeadingZeros) { //accept with leading zeros
//remove leading 0s
trimmedStr = (notation[1] || "") + notation[3];
return Number(trimmedStr);
}else return str;
}else{
} else return str;
} else {
return str;

@@ -117,8 +120,8 @@ }

*/
function trimZeros(numStr){
if(numStr && numStr.indexOf(".") !== -1){//float
function trimZeros(numStr) {
if (numStr && numStr.indexOf(".") !== -1) {//float
numStr = numStr.replace(/0+$/, ""); //remove ending zeros
if(numStr === ".") numStr = "0";
else if(numStr[0] === ".") numStr = "0"+numStr;
else if(numStr[numStr.length-1] === ".") numStr = numStr.substring(0,numStr.length-1);
if (numStr === ".") numStr = "0";
else if (numStr[0] === ".") numStr = "0" + numStr;
else if (numStr[numStr.length - 1] === ".") numStr = numStr.substring(0, numStr.length - 1);
return numStr;

@@ -129,8 +132,31 @@ }

function parse_int(numStr, base){
function parse_int(numStr, base) {
//polyfill
if(parseInt) return parseInt(numStr, base);
else if(Number.parseInt) return Number.parseInt(numStr, base);
else if(window && window.parseInt) return window.parseInt(numStr, base);
if (parseInt) return parseInt(numStr, base);
else if (Number.parseInt) return Number.parseInt(numStr, base);
else if (window && window.parseInt) return window.parseInt(numStr, base);
else throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")
}
/**
* Handle infinite values based on user option
* @param {string} str - original input string
* @param {number} num - parsed number (Infinity or -Infinity)
* @param {object} options - user options
* @returns {string|number|null} based on infinity option
*/
function handleInfinity(str, num, options) {
const isPositive = num === Infinity;
switch (options.infinity.toLowerCase()) {
case "null":
return null;
case "infinity":
return num; // Return Infinity or -Infinity
case "string":
return isPositive ? "Infinity" : "-Infinity";
case "original":
default:
return str; // Return original string like "1e1000"
}
}
import toNumber from "./strnum.js";
describe("Should convert all the valid numeric strings to number", () => {
it("should return undefined, null, empty string, or non-numeric as it is", () => {
expect(toNumber(undefined)).not.toBeDefined();
expect(toNumber(null)).toEqual(null);
expect(toNumber("")).toEqual("");
expect(toNumber("string")).toEqual("string");
expect(toNumber("e89794659669cb7bb967db73a7ea6889c3891727")).toEqual("e89794659669cb7bb967db73a7ea6889c3891727");
});
it("should not parse number with spaces or comma", () => {
expect(toNumber("12,12")).toEqual("12,12");
expect(toNumber("12 12")).toEqual("12 12");
expect(toNumber("12-12")).toEqual("12-12");
expect(toNumber("12.12.12")).toEqual("12.12.12");
})
it("should consider + sign", () => {
expect(toNumber("+12")).toEqual(12);
expect(toNumber("+ 12")).toEqual("+ 12");
expect(toNumber("12+12")).toEqual("12+12");
expect(toNumber("1212+")).toEqual("1212+");
})
it("should parse hexadecimal values", () => {
expect(toNumber("0x2f")).toEqual(47);
expect(toNumber("-0x2f")).toEqual(-47);
expect(toNumber("0x2f", { hex : true})).toEqual(47);
expect(toNumber("-0x2f", { hex : true})).toEqual(-47);
expect(toNumber("0x2f", { hex : false})).toEqual("0x2f");
expect(toNumber("-0x2f", { hex : false})).toEqual("-0x2f");
})
it("should not parse strings with 0x embedded", () => {
expect(toNumber("0xzz")).toEqual("0xzz");
expect(toNumber("iweraf0x123qwerqwer")).toEqual("iweraf0x123qwerqwer");
expect(toNumber("1230x55")).toEqual("1230x55");
expect(toNumber("JVBERi0xLjMNCiXi48")).toEqual("JVBERi0xLjMNCiXi48");
})
it("leading zeros", () => {
expect(toNumber("0")).toEqual(0);
expect(toNumber("00")).toEqual(0);
expect(toNumber("00.0")).toEqual(0);
expect(toNumber("0",{ leadingZeros : false})).toEqual(0);
expect(toNumber("00",{ leadingZeros : false})).toEqual("00");
expect(toNumber("00.0",{ leadingZeros : false})).toEqual("00.0");
expect(toNumber("06")).toEqual(6);
expect(toNumber("06", { leadingZeros : true})).toEqual(6);
expect(toNumber("06", { leadingZeros : false})).toEqual("06");
expect(toNumber("006")).toEqual(6);
expect(toNumber("006", { leadingZeros : true})).toEqual(6);
expect(toNumber("006", { leadingZeros : false})).toEqual("006");
expect(toNumber("000000000000000000000000017717" , { leadingZeros : false})).toEqual("000000000000000000000000017717");
expect(toNumber("000000000000000000000000017717" , { leadingZeros : true})).toEqual(17717);
expect(toNumber("020211201030005811824") ).toEqual("020211201030005811824");
expect(toNumber("0420926189200190257681175017717") ).toEqual(4.209261892001902e+29);
})
it("invalid floating number", () => {
expect(toNumber("20.21.030") ).toEqual("20.21.030");
expect(toNumber("0.21.030") ).toEqual("0.21.030");
expect(toNumber("0.21.") ).toEqual("0.21.");
});
it("floating point and leading zeros", () => {
expect(toNumber("0.")).toEqual(0);
expect(toNumber("+0.")).toEqual(0);
expect(toNumber("-0.")).toEqual(-0);
expect(toNumber("1.") ).toEqual(1);
expect(toNumber("00.00")).toEqual(0);
expect(toNumber("0.06")).toEqual(0.06);
expect(toNumber("00.6")).toEqual(0.6);
expect(toNumber(".006")).toEqual(0.006);
expect(toNumber("6.0")).toEqual(6);
expect(toNumber("06.0")).toEqual(6);
expect(toNumber("0.0", { leadingZeros : false})).toEqual(0);
expect(toNumber("00.00", { leadingZeros : false})).toEqual("00.00");
expect(toNumber("0.06", { leadingZeros : false})).toEqual(0.06);
expect(toNumber("00.6", { leadingZeros : false})).toEqual("00.6");
expect(toNumber(".006", { leadingZeros : false})).toEqual(0.006);
expect(toNumber("6.0" , { leadingZeros : false})).toEqual(6);
expect(toNumber("06.0" , { leadingZeros : false})).toEqual("06.0");
})
it("negative number leading zeros", () => {
expect(toNumber("+06")).toEqual(6);
expect(toNumber("-06")).toEqual(-6);
expect(toNumber("-06", { leadingZeros : true})).toEqual(-6);
expect(toNumber("-06", { leadingZeros : false})).toEqual("-06");
expect(toNumber("-0.0")).toEqual(-0);
expect(toNumber("-00.00")).toEqual(-0);
expect(toNumber("-0.06")).toEqual(-0.06);
expect(toNumber("-00.6")).toEqual(-0.6);
expect(toNumber("-.006")).toEqual(-0.006);
expect(toNumber("-6.0")).toEqual(-6);
expect(toNumber("-06.0")).toEqual(-6);
expect(toNumber("+06.0")).toEqual(6);
expect(toNumber("-0.0" , { leadingZeros : false})).toEqual(-0);
expect(toNumber("-00.00", { leadingZeros : false})).toEqual("-00.00");
expect(toNumber("-0.06", { leadingZeros : false})).toEqual(-0.06);
expect(toNumber("-00.6", { leadingZeros : false})).toEqual("-00.6");
expect(toNumber("-.006", {leadingZeros : false})).toEqual(-0.006);
expect(toNumber("-6.0" , { leadingZeros : false})).toEqual(-6);
expect(toNumber("-06.0" , { leadingZeros : false})).toEqual("-06.0");
})
it("long number", () => {
expect(toNumber("020211201030005811824") ).toEqual("020211201030005811824");
expect(toNumber("20211201030005811824") ).toEqual("20211201030005811824");
expect(toNumber("20.211201030005811824") ).toEqual("20.211201030005811824");
expect(toNumber("0.211201030005811824") ).toEqual("0.211201030005811824");
});
it("scientific notation", () => {
expect(toNumber("01.0e2" , { leadingZeros : false})).toEqual("01.0e2");
expect(toNumber("-01.0e2" , { leadingZeros : false})).toEqual("-01.0e2");
expect(toNumber("01.0e2") ).toEqual(100);
expect(toNumber("-01.0e2") ).toEqual(-100);
expect(toNumber("1.0e2") ).toEqual(100);
expect(toNumber("-1.0e2") ).toEqual(-100);
expect(toNumber("1.0e-2")).toEqual(0.01);
expect(toNumber("420926189200190257681175017717") ).toEqual(4.209261892001902e+29);
expect(toNumber("420926189200190257681175017717" , { eNotation: false} )).toEqual("420926189200190257681175017717");
expect(toNumber("1e-2")).toEqual(0.01);
expect(toNumber("1e+2")).toEqual(100);
expect(toNumber("1.e+2")).toEqual(100);
});
it("scientific notation with upper E", () => {
expect(toNumber("01.0E2" , { leadingZeros : false})).toEqual("01.0E2");
expect(toNumber("-01.0E2" , { leadingZeros : false})).toEqual("-01.0E2");
expect(toNumber("01.0E2") ).toEqual(100);
expect(toNumber("-01.0E2") ).toEqual(-100);
expect(toNumber("1.0E2") ).toEqual(100);
expect(toNumber("-1.0E2") ).toEqual(-100);
expect(toNumber("1.0E-2")).toEqual(0.01);
expect(toNumber("E-2")).toEqual("E-2");
expect(toNumber("E2")).toEqual("E2");
expect(toNumber("0E2")).toEqual(0);
expect(toNumber("-0E2")).toEqual(-0);
expect(toNumber("00E2")).toEqual("00E2");
expect(toNumber("00E2", { leadingZeros : false})).toEqual("00E2");
});
it("should skip matching pattern", () => {
expect(toNumber("0", { skipLike: /.*/ })).toEqual("0");
expect(toNumber("+12", { skipLike: /\+[0-9]{10}/} )).toEqual(12);
expect(toNumber("12+12", { skipLike: /\+[0-9]{10}/} )).toEqual("12+12");
expect(toNumber("12+1212121212", { skipLike: /\+[0-9]{10}/} )).toEqual("12+1212121212");
expect(toNumber("+1212121212") ).toEqual(1212121212);
expect(toNumber("+1212121212", { skipLike: /\+[0-9]{10}/} )).toEqual("+1212121212");
})
it("should not change string if not number", () => {
expect(toNumber("+12 12")).toEqual("+12 12");
expect(toNumber(" +12 12 ")).toEqual(" +12 12 ");
})
it("should ignore sorrounded spaces ", () => {
expect(toNumber(" +1212 ")).toEqual(1212);
})
it("negative numbers", () => {
expect(toNumber("+1212")).toEqual(1212);
expect(toNumber("+12.12")).toEqual(12.12);
expect(toNumber("-12.12")).toEqual(-12.12);
expect(toNumber("-012.12")).toEqual(-12.12);
expect(toNumber("-012.12")).toEqual(-12.12);
})
});
import toNumber from "./strnum.js";
describe("Should convert all the valid numeric strings to number", () => {
it("should return undefined, null, empty string, or non-numeric as it is", () => {
// expect(toNumber("+ 90")).toEqual("+ 90");
// expect(toNumber("- 90")).toEqual("- 90");
expect(toNumber("-10E2")).toEqual(100);
});
});