tag preg_match_all limitar img from caracteres php validation numeric

php - preg_match_all - limitar caracteres input html



¿Cómo puedo verificar si la entrada del formulario es numérica en PHP? (9)

Lo que Rob dijo, aunque en lugar de expresiones regulares para verificar los dígitos, usaría ctype_digit

Necesito poder ver si una entrada de formulario en PHP es numérica. Si no es numérico, el sitio web debe redireccionar. He intentado is_numeric () pero parece que no funciona.

Los ejemplos de código serán agradables.

Estoy desarrollando un carrito de compras que acepta un valor entero para la cantidad. Estoy intentando esto:

if(!is_numeric($quantity)){ //redirect($data[''referurl'']."/badinput"); echo "is not numeric"; }


Marque is_int y is_numeric . Hay ejemplos en cada uno de los enlaces. Si necesita más ayuda, publicaré los datos con los que tiene problemas y un ejemplo de código.

EDITAR:

$quantity == 0

siempre será numérico, ya que devolverá un valor booleano (1 o 0). Lo correcto para hacerlo:

if ( is_numeric( $quantity ) ) { ... }

o

if ( is_int( $quantity ) ) { ... }


También podría ser conveniente hacer una validación del lado del cliente de la entrada usando JavaScript.

El viaje de ida y vuelta al servidor es muy largo para lo que podría equivaler a un error tipográfico, y usted reducirá la sobrecarga del servidor al hacer que el navegador del cliente haga un poco de control de calidad de antemano.


tharkun tiene la mejor respuesta hasta el momento. Si estás haciendo una pregunta como esta, creo que realmente no quieres empezar a jugar con reg-exp todavía.

Repensa tu lógica. ¿Por qué quiere verificar si $ quantity == 0 es un resultado numérico? Si intenta evitar errores b / c, cree que es posible que la cantidad no tenga un valor asignado, está revisando un poco tarde. Este es un agujero de seguridad muy común (y nefasto) en su aplicación: si $ quantity tiene un valor derivado de la entrada del usuario, asegúrese de desinfectar la entrada antes de que llegue a este punto en ejecución. Como una parte más pequeña del problema, no será necesario asignar un valor predeterminado, ya que desinfectó su entrada previamente (y esa desinfección es donde trataría con una situación ''sin entrada'').

¡Buena suerte!


if(!is_numeric($quantity == 0)){ //redirect($data[''referurl'']."/badinput"); echo "is not numeric";

Lo que tienes aquí son dos condiciones anidadas. Digamos que $ amount es 1.

La primera condición evalúa 1 == 0 y devuelve FALSO. La segunda condición verifica si FALSO es numérico y devuelve FALSO porque FALSO no es numérico.

solo escribe:

if (!is_numeric($quantity)) { echo ''is not numeric''; }


Probablemente deberías explicar lo que quieres decir con "numérico" - integral, coma flotante, notación exponencial, etc. is_numeric() aceptará todos estos.

Si desea verificar que una cadena no contenga más que dígitos, entonces podría usar una expresión regular, por ej.

/^/d+$/

Si vas a usar el valor real como si fuera un entero, probablemente quieras pasarlo a intval() todos modos, que devolverá 0 si el valor no se puede analizar; si 0 es un valor válido, entonces probablemente tendrá que manejar eso de alguna manera, tal vez restringiendo el rango inferior del valor.


Otra alternativa es ctype_digit . De los documentos:

Checks if all of the characters in the provided string, text, are numerical. Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. <?php $strings = array(''1820.20'', ''10002'', ''wsl!12''); foreach ($strings as $testcase) { if (ctype_digit($testcase)) { echo "The string $testcase consists of all digits./n"; } else { echo "The string $testcase does not consist of all digits./n"; } } ?>

El ejemplo anterior dará como resultado:
La cadena 1820.20 no consta de todos los dígitos.
La cadena 10002 consta de todos los dígitos.
La cadena wsl! 12 no consta de todos los dígitos.

<?php $numeric_string = ''42''; $integer = 42; ctype_digit($numeric_string); // true ctype_digit($integer); // false (ASCII 42 is the * character) is_numeric($numeric_string); // true is_numeric($integer); // true ?>


Usa expresiones regulares: /^/d+$/ debería resolver el problema


Prueba esto:

$numeric = "1"; //true default $string = trim($_GET[''string'']); $chkarray = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ",", "."); for ($i=0; $i < strlen($string); $i++) { if (!in_array(substr($string, $i, 1), $chkarray)) { $numeric = "0"; break; } }