@@ -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 );
@@ -562,8 +563,13 @@ private static function evaluateScalar($scalar, $flags, $references = array())
562
563
}
563
564
564
565
return ;
566
+
565
567
case 0 === strpos ($ scalar , '!!float ' ):
566
568
return (float ) substr ($ scalar , 8 );
569
+
570
+ case preg_match ('{^[+-]?[0-9][0-9_]*$} ' , $ scalar ):
571
+ $ scalar = str_replace ('_ ' , '' , (string ) $ scalar );
572
+
567
573
case ctype_digit ($ scalar ):
568
574
$ raw = $ scalar ;
569
575
$ cast = (int ) $ scalar ;
@@ -576,6 +582,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
576
582
return '0 ' == $ scalar [1 ] ? octdec ($ scalar ) : (((string ) $ raw === (string ) $ cast ) ? $ cast : $ raw );
577
583
case is_numeric ($ scalar ):
578
584
case preg_match (self ::getHexRegex (), $ scalar ):
585
+ $ scalar = str_replace ('_ ' , '' , $ scalar );
586
+
579
587
return '0x ' === $ scalar [0 ].$ scalar [1 ] ? hexdec ($ scalar ) : (float ) $ scalar ;
580
588
case '.inf ' === $ scalarLower :
581
589
case '.nan ' === $ scalarLower :
@@ -584,8 +592,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
584
592
return log (0 );
585
593
case 0 === strpos ($ scalar , '!!binary ' ):
586
594
return self ::evaluateBinaryScalar (substr ($ scalar , 9 ));
587
- case preg_match ('/^(-|\+)?[0-9,]+ (\.[0-9 ]+)?$/ ' , $ scalar ):
588
- return (float ) str_replace (', ' , '' , $ scalar );
595
+ case preg_match ('/^(-|\+)?[0-9][0-9,_]* (\.[0-9_ ]+)?$/ ' , $ scalar ):
596
+ return (float ) str_replace (array ( ', ' , ' _ ' ) , '' , $ scalar );
589
597
case preg_match (self ::getTimestampRegex (), $ scalar ):
590
598
if (Yaml::PARSE_DATETIME & $ flags ) {
591
599
return new \DateTime ($ scalar , new \DateTimeZone ('UTC ' ));
@@ -662,6 +670,6 @@ private static function getTimestampRegex()
662
670
*/
663
671
private static function getHexRegex ()
664
672
{
665
- return '~^0x[0-9a-f ]++$~i ' ;
673
+ return '~^0x[0-9a-f_ ]++$~i ' ;
666
674
}
667
675
}
0 commit comments