diff --git a/src/wp-includes/rest-api.php b/src/wp-includes/rest-api.php index 5548ecf5c6f45..dcd090c715dbe 100644 --- a/src/wp-includes/rest-api.php +++ b/src/wp-includes/rest-api.php @@ -1570,7 +1570,28 @@ function rest_is_boolean( $maybe_bool ) { * @return bool True if an integer, otherwise false. */ function rest_is_integer( $maybe_integer ) { - return is_numeric( $maybe_integer ) && round( (float) $maybe_integer ) === (float) $maybe_integer; + if ( is_int( $maybe_integer ) ) { + return true; + } + + if ( is_bool( $maybe_integer ) || ! is_scalar( $maybe_integer ) ) { + return false; + } + + $integer_pattern = '/^[+-]?\d+$/'; + $scientific_pattern = '/^[+-]?\d+e\+?\d+$/i'; + + $value = trim( (string) $maybe_integer ); + + if ( preg_match( $integer_pattern, $value ) ) { + return true; + } + + if ( preg_match( $scientific_pattern, $value ) ) { + return true; + } + + return false; } /**