php comprobando el valor de int. Validación de parámetros numéricos en PHP

Ahora el sitio está trabajando activamente en el lanzamiento de una nueva sección. Y al escribir algunos scripts para él, se hizo necesario verificar las variables para obtener un número. Y no solo por un número (después de todo, 1,5 también es un número), sino por un número entero. Y así es como hice esta verificación.

Comprobando si una variable es un número entero en PHP

Para verificar si un número es un número entero en PHP, usamos una expresión regular:

En consecuencia, si la variable es un número entero, realizamos la acción que necesitamos y viceversa.

Comprobando si una variable es un número entero en JavaScript

En JavaScript, las cosas son un poco diferentes, y aquí necesitamos escribir nuestra propia pequeña función:

Función number_scan(num) ( return (num ^ 0) === num; )

y ya lo uso para la verificación:

function number_scan(num) ( return (num ^ 0) === num; ) var numero = "1.3"; if(number_scan(number)) (//Acción si el número es un entero) else (//Acción si el número es una fracción o la variable no es un número en absoluto)

Aquí también, con una variable igual a un número entero, se realiza la acción que necesita y viceversa.

Por ejemplo, tome esta dirección: http://example.com/price.php?product=859844&page=99 .

El script muestra una lista de precios en las tiendas para el producto del producto, el parámetro de página opcional especifica el número de página. Si no se especifica la página y la URL se parece a http://example.com/price.php?product=859844 , representamos la primera página.

Antes de PHP 5.2.0, el problema se podía resolver de esta forma sencilla.

// Función para obtener un parámetro que es un número natural // $arr = matriz de parámetros ($GET o $POST), $name = nombre del parámetro, // La función devuelve el valor del parámetro, o $default si el falta el parámetro o la función no es válida get_param_nat($arr, $name, $default=null) ( if (!isset($arr[$name])) return $default; // Comprobamos de una forma muy sencilla, convertimos el parámetro a un número, luego de vuelta a una cadena // Si todo está bien, entonces la cadena resultante debe coincidir con el valor original del parámetro $val = $arr[$name]; $intval = intval($val); // Verificar si el número es mayor que cero if (strval($intval) != = $val || $intval< 1) return $default; return $intval; } // Проверяем параметр product if (($product = get_param_nat($_GET, "product")) === null) die("Product extraviado"); // Obtenga el número de página $página = get_param_nat($_GET, "página", 1);

A partir de la versión 5.2.0, apareció un grupo de funciones de filtro en PHP: filter_var, filter_input, filter_var_array y varias otras. Las funciones pueden verificar variables en busca de números enteros, números de coma flotante, correo electrónico, direcciones IP, URL, etc., así como también borrar cadenas de acuerdo con parámetros dados.

Reescribamos el código usando la función filter_input.

Función get_param_nat($tipo, $nombre, $predeterminado=null) ( $val = filter_input($tipo, FILTER_VALIDATE_INT, array("min_range" => 1, "max_range" => PHP_INT_MAX)); // filter_input devuelve falso si se filtra falló, o es nulo si la variable no está definida if ($val === null || $val === false) return $default; return $val; ) // Verifique el parámetro del producto if (($producto = get_param_nat(INPUT_GET , "producto")) === null) die("Producto no encontrado"); // Obtener el número de página $página = get_param_nat(INPUT_GET, "página", 1);

Un poco de prueba mostró que las dos versiones de la función get_param_nat son casi iguales en términos de velocidad, y en ausencia de un parámetro, por ejemplo, no se especifica la página, la primera versión funcionará incluso un poco más rápido.

Así que depende de ti decidir qué usar. Yo personalmente uso la primera función, de alguna manera es más cercana y comprensible para mí.

Bueno, una pequeña digresión lírica al final. Para evitar la duplicación de páginas para los motores de búsqueda, por ejemplo, sin página y con página=1, te recomiendo que especifiques la url canónica en la sección de encabezado de la página. Se verá algo como esto:

...