@@ -8,7 +8,11 @@ const Common = require('../common');
88
99const internals = {
1010 numberRx : / ^ \s * [ + - ] ? (?: (?: \d + (?: \. \d * ) ? ) | (?: \. \d + ) ) (?: e ( [ + - ] ? \d + ) ) ? \s * $ / i,
11- precisionRx : / (?: \. ( \d + ) ) ? (?: [ e E ] ( [ + - ] ? \d + ) ) ? $ /
11+ precisionRx : / (?: \. ( \d + ) ) ? (?: [ e E ] ( [ + - ] ? \d + ) ) ? $ / ,
12+ exponentialPartRegex : / [ e E ] [ + - ] ? \d + $ / ,
13+ leadingSignAndZerosRegex : / ^ [ + - ] ? ( 0 * ) ? / ,
14+ dotRegex : / \. / ,
15+ trailingZerosRegex : / 0 + $ /
1216} ;
1317
1418
@@ -39,8 +43,7 @@ module.exports = Any.extend({
3943
4044 if ( ! schema . _flags . unsafe ) {
4145 if ( value . match ( / e / i) ) {
42- const constructed = internals . normalizeExponent ( `${ result . value / Math . pow ( 10 , matches [ 1 ] ) } e${ matches [ 1 ] } ` ) ;
43- if ( constructed !== internals . normalizeExponent ( value ) ) {
46+ if ( internals . extractSignificantDigits ( value ) !== internals . extractSignificantDigits ( String ( result . value ) ) ) {
4447 result . errors = error ( 'number.unsafe' ) ;
4548 return result ;
4649 }
@@ -297,15 +300,13 @@ module.exports = Any.extend({
297300
298301// Helpers
299302
300- internals . normalizeExponent = function ( str ) {
303+ internals . extractSignificantDigits = function ( value ) {
301304
302- return str
303- . replace ( / E / , 'e' )
304- . replace ( / \. ( \d * [ 1 - 9 ] ) ? 0 + e / , '.$1e' )
305- . replace ( / \. e / , 'e' )
306- . replace ( / e \+ / , 'e' )
307- . replace ( / ^ \+ / , '' )
308- . replace ( / ^ ( - ? ) 0 + ( [ 1 - 9 ] ) / , '$1$2' ) ;
305+ return value
306+ . replace ( internals . exponentialPartRegex , '' )
307+ . replace ( internals . dotRegex , '' )
308+ . replace ( internals . trailingZerosRegex , '' )
309+ . replace ( internals . leadingSignAndZerosRegex , '' ) ;
309310} ;
310311
311312
0 commit comments