From 5f98eddee5455337ac82578e987666bb51a800c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 21 Nov 2016 17:50:07 -0500 Subject: [PATCH 1/2] fix regression in lib/clean_number (alternate) - allow , and spaces in middle of numeric strings --- src/lib/clean_number.js | 6 +++++- test/jasmine/tests/lib_test.js | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lib/clean_number.js b/src/lib/clean_number.js index dbedfe2e2a6..853c4591387 100644 --- a/src/lib/clean_number.js +++ b/src/lib/clean_number.js @@ -16,6 +16,7 @@ var BADNUM = require('../constants/numerical').BADNUM; // precompile these regex's for speed var FRONTJUNK = /^['"%,$#\s']+/; var ENDJUNK = /['"%,$#\s']+$/; +var GLOBALJUNK = /[,\s]/g; /** * cleanNumber: remove common leading and trailing cruft @@ -23,7 +24,10 @@ var ENDJUNK = /['"%,$#\s']+$/; */ module.exports = function cleanNumber(v) { if(typeof v === 'string') { - v = v.replace(FRONTJUNK, '').replace(ENDJUNK, ''); + v = v + .replace(FRONTJUNK, '') + .replace(ENDJUNK, '') + .replace(GLOBALJUNK, ''); } if(isNumeric(v)) return Number(v); diff --git a/test/jasmine/tests/lib_test.js b/test/jasmine/tests/lib_test.js index ded7aa9d3df..4d8381c0ec4 100644 --- a/test/jasmine/tests/lib_test.js +++ b/test/jasmine/tests/lib_test.js @@ -1522,7 +1522,12 @@ describe('Test lib.js:', function() { ['-100.001', -100.001], [' $4.325 #%\t', 4.325], [' " #1" ', 1], - [' \'\n \r -9.2e7 \t\' ', -9.2e7] + [' \'\n \r -9.2e7 \t\' ', -9.2e7], + ['1,690,000', 1690000], + ['1 690 000', 1690000], + ['2 2', 22], + ['$5,162,000.00', 5162000], + [' $1,410,000.00 ', 1410000], ].forEach(function(v) { expect(Lib.cleanNumber(v[0])).toBe(v[1], v[0]); }); @@ -1531,7 +1536,7 @@ describe('Test lib.js:', function() { it('should not accept other objects or cruft in the middle', function() { [ NaN, Infinity, -Infinity, null, undefined, new Date(), '', - ' ', '\t', '2 2', '2%2', '2$2', {1: 2}, [1], ['1'], {}, [] + ' ', '\t', '2%2', '2$2', {1: 2}, [1], ['1'], {}, [] ].forEach(function(v) { expect(Lib.cleanNumber(v)).toBeUndefined(v); }); From 79fe7d5f24b7978e5373995c2f6df43aa9facd0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 21 Nov 2016 18:15:33 -0500 Subject: [PATCH 2/2] turn front/end/global regex's into 1 - and allow only ' ' in middle instead of all space characters --- src/lib/clean_number.js | 11 +++-------- test/jasmine/tests/lib_test.js | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/lib/clean_number.js b/src/lib/clean_number.js index 853c4591387..d36b08db3df 100644 --- a/src/lib/clean_number.js +++ b/src/lib/clean_number.js @@ -13,10 +13,8 @@ var isNumeric = require('fast-isnumeric'); var BADNUM = require('../constants/numerical').BADNUM; -// precompile these regex's for speed -var FRONTJUNK = /^['"%,$#\s']+/; -var ENDJUNK = /['"%,$#\s']+$/; -var GLOBALJUNK = /[,\s]/g; +// precompile for speed +var JUNK = /^['"%,$#\s']+|[, ]|['"%,$#\s']+$/g; /** * cleanNumber: remove common leading and trailing cruft @@ -24,10 +22,7 @@ var GLOBALJUNK = /[,\s]/g; */ module.exports = function cleanNumber(v) { if(typeof v === 'string') { - v = v - .replace(FRONTJUNK, '') - .replace(ENDJUNK, '') - .replace(GLOBALJUNK, ''); + v = v.replace(JUNK, ''); } if(isNumeric(v)) return Number(v); diff --git a/test/jasmine/tests/lib_test.js b/test/jasmine/tests/lib_test.js index 4d8381c0ec4..562de0cee9d 100644 --- a/test/jasmine/tests/lib_test.js +++ b/test/jasmine/tests/lib_test.js @@ -1536,7 +1536,7 @@ describe('Test lib.js:', function() { it('should not accept other objects or cruft in the middle', function() { [ NaN, Infinity, -Infinity, null, undefined, new Date(), '', - ' ', '\t', '2%2', '2$2', {1: 2}, [1], ['1'], {}, [] + ' ', '\t', '2\t2', '2%2', '2$2', {1: 2}, [1], ['1'], {}, [] ].forEach(function(v) { expect(Lib.cleanNumber(v)).toBeUndefined(v); });