@@ -206,6 +206,7 @@ public static function dump($value, $flags = 0)
206
206
case Escaper::requiresDoubleQuoting ($ value ):
207
207
return Escaper::escapeWithDoubleQuotes ($ value );
208
208
case Escaper::requiresSingleQuoting ($ value ):
209
+ case preg_match ('{^[0-9]+[_0-9]*$} ' , $ value ):
209
210
case preg_match (self ::getHexRegex (), $ value ):
210
211
case preg_match (self ::getTimestampRegex (), $ value ):
211
212
return Escaper::escapeWithSingleQuotes ($ value );
@@ -564,6 +565,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
564
565
return ;
565
566
case 0 === strpos ($ scalar , '!!float ' ):
566
567
return (float ) substr ($ scalar , 8 );
568
+ case preg_match ('{^[+-]?[0-9][0-9_]*$} ' , $ scalar ):
569
+ $ scalar = str_replace ('_ ' , '' , (string ) $ scalar );
567
570
case ctype_digit ($ scalar ):
568
571
$ raw = $ scalar ;
569
572
$ cast = (int ) $ scalar ;
@@ -576,6 +579,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
576
579
return '0 ' == $ scalar [1 ] ? octdec ($ scalar ) : (((string ) $ raw === (string ) $ cast ) ? $ cast : $ raw );
577
580
case is_numeric ($ scalar ):
578
581
case preg_match (self ::getHexRegex (), $ scalar ):
582
+ $ scalar = str_replace ('_ ' , '' , $ scalar );
583
+
579
584
return '0x ' === $ scalar [0 ].$ scalar [1 ] ? hexdec ($ scalar ) : (float ) $ scalar ;
580
585
case '.inf ' === $ scalarLower :
581
586
case '.nan ' === $ scalarLower :
@@ -584,8 +589,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
584
589
return log (0 );
585
590
case 0 === strpos ($ scalar , '!!binary ' ):
586
591
return self ::evaluateBinaryScalar (substr ($ scalar , 9 ));
587
- case preg_match ('/^(-|\+)?[0-9,]+ (\.[0-9 ]+)?$/ ' , $ scalar ):
588
- return (float ) str_replace (', ' , '' , $ scalar );
592
+ case preg_match ('/^(-|\+)?[0-9][0-9,_]* (\.[0-9_ ]+)?$/ ' , $ scalar ):
593
+ return (float ) str_replace (array ( ', ' , ' _ ' ) , '' , $ scalar );
589
594
case preg_match (self ::getTimestampRegex (), $ scalar ):
590
595
if (Yaml::PARSE_DATETIME & $ flags ) {
591
596
return new \DateTime ($ scalar , new \DateTimeZone ('UTC ' ));
@@ -662,6 +667,6 @@ private static function getTimestampRegex()
662
667
*/
663
668
private static function getHexRegex ()
664
669
{
665
- return '~^0x[0-9a-f ]++$~i ' ;
670
+ return '~^0x[0-9a-f_ ]++$~i ' ;
666
671
}
667
672
}
0 commit comments