diff --git a/src/wp-includes/rest-api/class-wp-rest-request.php b/src/wp-includes/rest-api/class-wp-rest-request.php
index 2f6aa8a..f77c92f 100644
--- a/src/wp-includes/rest-api/class-wp-rest-request.php
+++ b/src/wp-includes/rest-api/class-wp-rest-request.php
@@ -844,7 +844,23 @@ class WP_REST_Request implements ArrayAccess {
 			$param = $this->get_param( $key );
 
 			if ( null !== $param && ! empty( $arg['validate_callback'] ) ) {
-				$valid_check = call_user_func( $arg['validate_callback'], $param, $this, $key );
+
+				/**
+				 * Filter validation callbacks which should only be supplied the parameter to validate.
+				 *
+				 * Some functions used as validation callbacks (e.g. is_numeric()), throw
+				 * errors when supplied more than one argument.
+				 *
+				 * @since 4.4.0
+				 *
+				 * @param array    $single_argument_callbacks
+				 */
+				$single_argument_callbacks = apply_filters( 'rest_request_validate_callbacks_single_argument', array( 'is_numeric', 'sanitize_title' ) );
+				if ( in_array( $arg['validate_callback'], $single_argument_callbacks ) ) {
+					$valid_check = call_user_func( $arg['validate_callback'], $param );
+				} else {
+					$valid_check = call_user_func( $arg['validate_callback'], $param, $this, $key );
+				}
 
 				if ( false === $valid_check ) {
 					$invalid_params[ $key ] = __( 'Invalid param.' );
diff --git a/tests/phpunit/tests/rest-api/rest-request.php b/tests/phpunit/tests/rest-api/rest-request.php
index ba40892..ea0704f 100644
--- a/tests/phpunit/tests/rest-api/rest-request.php
+++ b/tests/phpunit/tests/rest-api/rest-request.php
@@ -391,4 +391,31 @@ class Tests_REST_Request extends WP_UnitTestCase {
 		$this->assertArrayHasKey( 'someinteger', $data['params'] );
 		$this->assertArrayHasKey( 'someotherinteger', $data['params'] );
 	}
+
+	public function test_validate_callback_only_pass_value() {
+		$this->request->set_url_params( array(
+			'numeric_value'         => '123',
+			'non_numeric_value'     => 'foo-bar',
+			) );
+		$this->request->set_attributes( array(
+			'args' => array(
+				'numeric_value' => array(
+					'validate_callback' => 'is_numeric',
+				),
+				'non_numeric_value' => array(
+					'validate_callback' => 'is_numeric',
+				),
+			),
+		));
+
+		$valid = $this->request->has_valid_params();
+
+		$this->assertWPError( $valid );
+		$this->assertEquals( 'rest_invalid_param', $valid->get_error_code() );
+		$data = $valid->get_error_data( 'rest_invalid_param' );
+		$this->assertArrayHasKey( 'non_numeric_value', $data['params'] );
+		$this->assertFalse( array_key_exists( 'numeric_value', $data ) );
+
+	}
+
 }
