Socket
Socket
Sign inDemoInstall

strnum

Package Overview
Dependencies
0
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.4 to 1.0.5

.vscode/launch.json

7

package.json
{
"name": "strnum",
"version": "1.0.4",
"version": "1.0.5",
"description": "Parse String to Number based on configuration",

@@ -20,3 +20,6 @@ "main": "strnum.js",

"author": "Amit Gupta (https://amitkumargupta.work/)",
"license": "MIT"
"license": "MIT",
"devDependencies": {
"jasmine": "^3.10.0"
}
}

@@ -79,2 +79,9 @@ # strnum

toNumber("+1212121212", { skipLike: /\+[0-9]{10}/} )); //"+1212121212"
```
Supported Options
```js
hex : true, //when hexadecimal string should be parsed
leadingZeros: true, //when number with leading zeros like 08 should be parsed. 0.0 is not impacted
eNotation: true //when number with eNotation or number parsed in eNotation should be considered
```

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

//polyfill
if (!Number.parseInt && window.parseInt) {
Number.parseInt = window.parseInt;
}
if (!Number.parseFloat && window.parseFloat) {
Number.parseFloat = window.parseFloat;
}
const consider = {

@@ -11,2 +21,3 @@ hex : true,

decimalPoint: "\.",
eNotation: true
//skipLike: /regex/

@@ -27,3 +38,6 @@ };

let trimmedStr = str.trim();
// if(trimmedStr === "0.0") return 0;
// else if(trimmedStr === "+0.0") return 0;
// else if(trimmedStr === "-0.0") return -0;
if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;

@@ -40,9 +54,54 @@ else if (options.hex && hexRegex.test(trimmedStr)) {

if(match){
const negative = match[1];
const sign = match[1];
const leadingZeros = match[2];
const num = match[3]; //complete num
let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros
//trim ending zeros for floating number
const eNotation = match[4] || match[6];
if(leadingZeros.length === 1 && num[0] === ".") return Number(str);
else if(!options.leadingZeros && leadingZeros.length > 0) return str;
else return Number(trimmedStr);
if(!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== ".") return str; //-0123
else if(!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== ".") return str; //0123
else{//no leading zeros or leading zeros are allowed
const num = Number(trimmedStr);
const numStr = "" + num;
if(numStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation
if(options.eNotation) return num;
else return str;
}else if(eNotation){ //given number has enotation
if(options.eNotation) return num;
else return str;
}else if(trimmedStr.indexOf(".") !== -1){ //floating number
// const decimalPart = match[5].substr(1);
// const intPart = trimmedStr.substr(0,trimmedStr.indexOf("."));
// const p = numStr.indexOf(".");
// const givenIntPart = numStr.substr(0,p);
// const givenDecPart = numStr.substr(p+1);
if(numStr === "0" && (numTrimmedByZeros === "") ) return num; //0.0
else if(numStr === numTrimmedByZeros) return num; //0.456. 0.79000
else if( sign && numStr === "-"+numTrimmedByZeros) return num;
else return str;
}
if(leadingZeros){
// if(numTrimmedByZeros === numStr){
// if(options.leadingZeros) return num;
// else return str;
// }else return str;
if(numTrimmedByZeros === numStr) return num;
else if(sign+numTrimmedByZeros === numStr) return num;
else return str;
}
if(trimmedStr === numStr) return num;
else if(trimmedStr === sign+numStr) return num;
// else{
// //number with +/- sign
// trimmedStr.test(/[-+][0-9]);
// }
return str;
}
// else if(!eNotation && trimmedStr && trimmedStr !== Number(trimmedStr) ) return str;
}else{ //non-numeric string

@@ -54,2 +113,17 @@ return str;

/**
*
* @param {string} numStr without leading zeros
* @returns
*/
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.substr(0,numStr.length-1);
return numStr;
}
return numStr;
}
module.exports = toNumber

@@ -18,2 +18,3 @@ const toNumber = require("./strnum");

expect(toNumber("+12")).toEqual(12);
expect(toNumber("+ 12")).toEqual("+ 12");
expect(toNumber("12+12")).toEqual("12+12");

@@ -44,3 +45,15 @@ expect(toNumber("1212+")).toEqual("1212+");

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.");
expect(toNumber("0.") ).toEqual("0.");
expect(toNumber("1.") ).toEqual("1.");
});
it("floating point and leading zeros", () => {

@@ -64,2 +77,3 @@ expect(toNumber("0.0")).toEqual(0);

it("negative number leading zeros", () => {
expect(toNumber("+06")).toEqual(6);
expect(toNumber("-06")).toEqual(-6);

@@ -86,5 +100,6 @@ expect(toNumber("-06", { leadingZeros : true})).toEqual(-6);

it("long number", () => {
expect(toNumber("420926189200190257681175017717") ).toEqual(4.209261892001902e+29);
expect(toNumber("000000000000000000000000017717" , { leadingZeros : false})).toEqual("000000000000000000000000017717");
expect(toNumber("000000000000000000000000017717" , { leadingZeros : true})).toEqual(17717);
expect(toNumber("020211201030005811824") ).toEqual("020211201030005811824");
expect(toNumber("20211201030005811824") ).toEqual("20211201030005811824");
expect(toNumber("20.211201030005811824") ).toEqual("20.211201030005811824");
expect(toNumber("0.211201030005811824") ).toEqual("0.211201030005811824");
});

@@ -100,2 +115,6 @@ it("scientific notation", () => {

expect(toNumber("1.0e-2")).toEqual(0.01);
expect(toNumber("420926189200190257681175017717") ).toEqual(4.209261892001902e+29);
expect(toNumber("420926189200190257681175017717" , { eNotation: false} )).toEqual("420926189200190257681175017717");
});

@@ -128,2 +147,10 @@

})
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);
})
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc