@@ -206,6 +206,7 @@ public static function dump($value, $flags = 0)
206206 case Escaper::requiresDoubleQuoting ($ value ):
207207 return Escaper::escapeWithDoubleQuotes ($ value );
208208 case Escaper::requiresSingleQuoting ($ value ):
209+ case preg_match ('{^[0-9]+[_0-9]*$} ' , $ value ):
209210 case preg_match (self ::getHexRegex (), $ value ):
210211 case preg_match (self ::getTimestampRegex (), $ value ):
211212 return Escaper::escapeWithSingleQuotes ($ value );
@@ -564,6 +565,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
564565 return ;
565566 case 0 === strpos ($ scalar , '!!float ' ):
566567 return (float ) substr ($ scalar , 8 );
568+ case preg_match ('{^[+-]?[0-9][0-9_]*$} ' , $ scalar ):
569+ $ scalar = str_replace ('_ ' , '' , (string ) $ scalar );
567570 case ctype_digit ($ scalar ):
568571 $ raw = $ scalar ;
569572 $ cast = (int ) $ scalar ;
@@ -576,6 +579,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
576579 return '0 ' == $ scalar [1 ] ? octdec ($ scalar ) : (((string ) $ raw === (string ) $ cast ) ? $ cast : $ raw );
577580 case is_numeric ($ scalar ):
578581 case preg_match (self ::getHexRegex (), $ scalar ):
582+ $ scalar = str_replace ('_ ' , '' , $ scalar );
583+
579584 return '0x ' === $ scalar [0 ].$ scalar [1 ] ? hexdec ($ scalar ) : (float ) $ scalar ;
580585 case '.inf ' === $ scalarLower :
581586 case '.nan ' === $ scalarLower :
@@ -584,8 +589,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
584589 return log (0 );
585590 case 0 === strpos ($ scalar , '!!binary ' ):
586591 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 );
589594 case preg_match (self ::getTimestampRegex (), $ scalar ):
590595 if (Yaml::PARSE_DATETIME & $ flags ) {
591596 return new \DateTime ($ scalar , new \DateTimeZone ('UTC ' ));
@@ -662,6 +667,6 @@ private static function getTimestampRegex()
662667 */
663668 private static function getHexRegex ()
664669 {
665- return '~^0x[0-9a-f ]++$~i ' ;
670+ return '~^0x[0-9a-f_ ]++$~i ' ;
666671 }
667672}
0 commit comments