From 430ec32992b4e33eb5897b29a3dc744b4a637286 Mon Sep 17 00:00:00 2001 From: Ivan Date: Fri, 18 Oct 2019 16:56:45 +0300 Subject: [PATCH] [ExpressionLanguage][Lexer] Exponential format for number Exponential format has been added for numbers. Ex: 1.99E+3 === 1990, Ex: expression (1 + 1.99E+3) = 1991 --- src/Symfony/Component/ExpressionLanguage/Lexer.php | 2 +- src/Symfony/Component/ExpressionLanguage/Tests/LexerTest.php | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/ExpressionLanguage/Lexer.php b/src/Symfony/Component/ExpressionLanguage/Lexer.php index 48b15ffe7c235..95b90705dd32f 100644 --- a/src/Symfony/Component/ExpressionLanguage/Lexer.php +++ b/src/Symfony/Component/ExpressionLanguage/Lexer.php @@ -42,7 +42,7 @@ public function tokenize($expression) continue; } - if (preg_match('/[0-9]+(?:\.[0-9]+)?/A', $expression, $match, 0, $cursor)) { + if (preg_match('/[0-9]+(?:\.[0-9]+)?([Ee][\+\-][0-9]+)?/A', $expression, $match, 0, $cursor)) { // numbers $number = (float) $match[0]; // floats if (preg_match('/^[0-9]+$/', $match[0]) && $number <= PHP_INT_MAX) { diff --git a/src/Symfony/Component/ExpressionLanguage/Tests/LexerTest.php b/src/Symfony/Component/ExpressionLanguage/Tests/LexerTest.php index eacfbbcd705be..2674752aa25c5 100644 --- a/src/Symfony/Component/ExpressionLanguage/Tests/LexerTest.php +++ b/src/Symfony/Component/ExpressionLanguage/Tests/LexerTest.php @@ -97,8 +97,10 @@ public function getTokenizeData() new Token('punctuation', '[', 25), new Token('number', '4', 26), new Token('punctuation', ']', 27), + new Token('operator', '-', 29), + new Token('number', '1990', 31), ], - '(3 + 5) ~ foo("bar").baz[4]', + '(3 + 5) ~ foo("bar").baz[4] - 1.99E+3', ], [ [new Token('operator', '..', 1)],