Foros del Web » Programando para Internet » PHP »

Validar Decimales

Estas en el tema de Validar Decimales en el foro de PHP en Foros del Web. Hola a todos: Tengo un drama.... necesito validar un formulario para que un usuario ingrese sólo un valores entre 0 y 1 (incluyendo decimales) y ...
  #1 (permalink)  
Antiguo 10/06/2003, 22:28
 
Fecha de Ingreso: julio-2002
Mensajes: 119
Antigüedad: 15 años, 4 meses
Puntos: 0
Validar Decimales

Hola a todos: Tengo un drama.... necesito validar un formulario para que un usuario ingrese sólo un valores entre 0 y 1 (incluyendo decimales) y si no es correcto que envie un mensaje del estilo "el numero ingresado no corresponde" y se devuelva a la caja de texto correspondiente....

¿Como púedo hacerlo?

De antemano gracias
  #2 (permalink)  
Antiguo 10/06/2003, 23:29
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Bueno, yo lo resolvería con preg_match...

Código PHP:
<?
$numero
[1]="1000101001.0100";
$numero[2]="1110002010.02";
$numero[3]="101010 1010.01";
$numero[4]="10.01";

function 
valida($num) {
    if (
preg_match("/^[01.]*$/",$num)){
        return 
true;
    } else {
        return 
false;
    }
}

foreach (
$numero as $num) {
    if (
valida($num)){
        echo 
"El valor ".$num." SI es correcto<br>\n";
    } else {
        echo 
"El valor ".$num." NO es correcto<br>\n";
    }
}
?>
Obviamente lo unico que necesitas es la funcion "valida", todo lo demas es un elemplo que resulta en lo siguiente:

El valor 1000101001.0100 SI es correcto
El valor 1110002010.02 NO es correcto
El valor 101010 1010.01 NO es correcto
El valor 10.01 SI es correcto
__________________
Manoloweb
  #3 (permalink)  
Antiguo 11/06/2003, 12:45
 
Fecha de Ingreso: julio-2002
Mensajes: 119
Antigüedad: 15 años, 4 meses
Puntos: 0
La verdad es que parece que no quedo clara la pregunta. La idea es que el usuario ingrese un valor entre 0 y 1 con dos decimales, por ejemplo 0.37, y necesito validarlo antes de ingresar a la base de datos....

La verdad he leido, probado y ahora pregunto....

Usando Javascript he podido hacer solo que valide si el valor es mayor que 1 o menor que 0 pero no puedo hacer que valide el decimal (mejor dicho no logro que el usuario pueda ingresar el punto)

la funcion en java que impide ingresar caracteres (incluso puntos)es la siguiente....

<script language="javascript">
function numeros(){
var key=window.event.keyCode;
if (key < 48 || key > 57){
window.event.keyCode=0;
}}
</script>

luego valido el valor ingresado con esta...

<script language="JavaScript">
function valida_form() {
var bError = false;

bError = bError || (eval("document.form1.humedad.value > 1")) || (eval("document.form1.humedad.value < 0") || (eval("document.form1.humedad.value == ''"));
if (bError){
alert("La Humedad debe estar entre 0 y 1");
eval("document.form1.humedad.focus()");
return false;
}

return true;
}
</script>

pero en el fondo creo que javascript no es buena alternativa porque puede deshabilitarse en el navegador del usuario (o no??)


Cualquier ayuda será muy bien agradecida.......
  #4 (permalink)  
Antiguo 11/06/2003, 13:57
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Código PHP:
<?
$numero
[1]="0.99";
$numero[2]="0.1";
$numero[3]="1.1";
$numero[4]="0";

function 
valida($num) {
    if (
preg_match("/^0[.]{0,1}[0-9]{0,2}$/",$num)){
        return 
true;
    } else {
        if (
$num==1){
            return 
true;
        } else {
        return 
false;
        }
    }
}

foreach (
$numero as $num) {
    if (
valida($num)){
        echo 
"El valor ".$num." SI es correcto<br>\n";
    } else {
        echo 
"El valor ".$num." NO es correcto<br>\n";
    }
}
?>
Si quieres que tenga mas decimales que 0.00, solo cambia esto:

preg_match("/^0[.]{0,1}[0-9]{0,2}$/",$num)

por el numero de decimales que quieras, o si no quieres limitar la cantidad de decimales, puedes hacer esto:

preg_match("/^0[.]{0,1}[0-9]*$/",$num)

Saludos!
__________________
Manoloweb
  #5 (permalink)  
Antiguo 11/06/2003, 22:37
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Con lo de javascript, es cierto, no es una buena alternativa en cuanto a seguridad se refiere. Lo que siempre recomiendo es un chequeo en el cliente, y luego desde el servidor (o sea con PHP!).
Con el script js. deberias preguntar en su correspondiente foro, por aquellos lados te ayudarán mejor...

Por lo de PHP, una solucion mas simple seria forzar (o convertir) el string que te llega del formulario a un double y alli lo comparas con cero y uno...
Código PHP:
$valor "0.25478";  // como string
$valor floatval($valor);  // como float, double, con coma o como lo llamen
if ( $valor>&& $valor<) {
    echo 
"OK";
} else {
    echo 
"NO";

Con respecto al numero de decimales, lo que puedes hacer es contar el numero de caracteres que hay despues del punto (antes de convertir el valor a double).
[PHP]
$num = strlen(strrchr($valor, "."))-1;
[PHP]
y luego compararlo con lo que decees...
Pero lo mejor seria, si es que $valor paso el "if()", redondear el double con 2 decimales usando round($valor, 2) u otras funciones de este tipo como ceil() u floor().

Como vez hay varias formas de hacer lo mismo...

Saludos,
  #6 (permalink)  
Antiguo 12/06/2003, 10:11
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
La solución de fran86 es mas limpia que la mia, lo unico que yo le cambiaría es esto:

if ( $valor>=0 && $valor<=1 )

Para que tambien te tome los valores 0 y 1 como válidos (si es que asi lo necesitas)

Saludos!
__________________
Manoloweb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:42.