Sv Community El Salvador
Soporte y Tecnología => Programación => Web => Topic started by: pippin on March 23, 2012, 08:48:55 pm
-
Hola amigos de SvCommunity como siempre ando por aqui pidiendo vuestra ayuda, como dice el titulo, lo que necesito es validar que el contenido del campo se de este formato 0.0, he revisado algunos ejemplos con expresiones regulares donde admiten letras o numeros o viceversas pero no he encontrado uno de este tipo, espero me puedan ayudar.
Gracias.
-
>>> console.log(/^[0-9]\.[0-9]$/.test('0.0'));
true
>>> console.log(/^[0-9]\.[0-9]$/.test('a.0'));
false
>>> console.log(/^[0-9]\.[0-9]$/.test('123'));
false
>>> console.log(/^[0-9]\.[0-9]$/.test('1.3'));
true
Eso es sin jQuery, es decir usando unicamente expresiones regulares de JavaScript.
Editado: esa expresión es para tu requerimiento especifico de "0.0" que lo entiendo como 1 número del 1 al 9 (el 0) 1 punto (el .) 1 número del 1 al 9 (el 0)
-
Gracias vlad por tu respuesta pero la verdad no entiendo como debo implementarlo.
-
Un ejemplo seria:
var campoValido = /^[0-9]\.[0-9]$/.test($("#ID_de_tu_campo_de_texto").val());
if (campoValido)
// Es valido
else
// No es valido
-
Ecxelente tu solucion vlad, gracias. Ahora te pregunto algo si quiero que ese valor no sea superior a 5.0, tendria que hacer una formula independiente o podria utilizar esa tamien?
Ya he modificado para que el primer caracter sea solo hasta 5 poniendo [0-9] pero no se como hacer para que el tercer caractera vaya hasta 0 solo si el priero es 5.
-
Bueno lo he solucionado asi:
$(".txtCalificacion").live("focusout", function(){
//Expresion regular para validar la nota tiene que ir desde 0.0 hasta 5.0
var campoValido = /^[0-5]\.[0-9]$/.test($(this).val());
if(!campoValido || $(this).val() > 5.0){
alert("Formato no Valido");
$(this).attr("value", "0.0");
}
});
-
Puedes tambn corregir en tu expresion regular que los numeros no sean mayores a 5.0, para qu la expresion regular te valide todo tu rango:
Te quedaria asi:
$(".txtCalificacion").live("focusout", function(){
//Expresion regular para validar la nota tiene que ir desde 0.0 hasta 5.0
var campoValido = /^([0-4]\.[0-9]|5\.0)$/.test($(this).val());
if(!campoValido){
alert("Formato no Valido");
$(this).attr("value", "0.0");
}
});
Y "campoValido" cuanod se mayor que 5.0 te retornara FALSE
-
Una forma sencilla sin tener que reinventar la rueda es utilizando un Plugin muy funcional y completo que incluye varias validaciones útiles pueden revisar la documentación y descargar desde Aqui (http://"http://bassistance.de/jquery-plugins/jquery-plugin-validation/")
-
Una forma sencilla sin tener que reinventar la rueda es utilizando un Plugin muy funcional y completo que incluye varias validaciones útiles pueden revisar la documentación y descargar desde Aqui (http://"http://bassistance.de/jquery-plugins/jquery-plugin-validation/")
Aunque si es la única válidación que necesita realizar creo que esta un poco exagerado utilizar un plugin adicional para una tarea tan sencilla, sobre todo si el pensaba utilizar jQuery solo para esa validación.
PD: la URL que pusiste esta mal.
-
Quizas usar el plugin no sea necesario para este problema, pero no es mala idea aprovechar la situación para usarlo. Ese plugin fue el primero que utilize para validación cuando estaba aprendiendo y lo recomiendo bastante. Agrega un poquito de complejidad pero es bastante útil.
El link correcto es http://bassistance.de/jquery-plugins/jquery-plugin-validation (http://bassistance.de/jquery-plugins/jquery-plugin-validation), la documentación esta en los docs oficiales de jQuery http://docs.jquery.com/Plugins/Validation (http://docs.jquery.com/Plugins/Validation)
Aun con el uso del plugin, la regla de validación necesita expresiones regulares, para hacerlo solo necesitas agregar un metodo al namespace del plugin, en este caso lo he llamado tuRegla y he agregado la expresion regular de Juancho, pero estoy usando \d, el cual equivale a [0-9]
$.validator.addMethod('tuRegla', function(v, el){
return /^([0-4]\.\d|5\.0)$/.test(v);
}, 'NOPE');
Luego, suponiendo que tu HTML es este
<form>
<div id='status'></div>
<input type='text' name='in'/>
<input type='submit'/>
</form>
Solamente llamas al metodo validate, pasando las opciones de configuración en un objeto literal. En la propiedad rules, asignamos el metodo tuRegla al campo de texto nombrado in
$('form').validate({
rules:{
in:{ tuRegla: true }
},
showErrors: function(map, list){
updateStatus(map.in || 'ok');
},
submitHandler: function() {
updateStatus("sent");
}
});
La función updateStatus es la manera en la que trato de mantener el código organizado y evitar repeticion
var updateStatus = function(status){
$('#status').fadeOut(function(e){
$(this).text(status).fadeIn();
});
};
Podes revisar el demo aqui
http://jsfiddle.net/jaimem/ucxmz/1/ (http://jsfiddle.net/jaimem/ucxmz/1/)
He saltado bastantes detalles, pero si tenes preguntas aqui estamos a la orden.
-
Hos agradesco a todos por su ayuda, por eso quiero tanto este foro... Lo he solucionado utilizando la funcion que me paso vlad, el ejemplo de JaiMe esta muy bueno si fuese a utilizar la validacion en varios casos.
Gracias.
-
Disculpen soy nuevo por aqui y quisiera saber si la validación que han explicado puede hacerse con inputs generados vía ajax y como puedo implementarlo
gracias
:sur:
-
si se puede, pero los eventos hacelos con eventos que detecten elementos futuros o creados dinámicamente.
con ".on()" podes detectar eventos o atachar nuevos a ese tipo de elementos, lee mas sobre esto
http://api.jquery.com/on/ (http://api.jquery.com/on/)
-
Disculpen soy nuevo por aqui y quisiera saber si la validación que han explicado puede hacerse con inputs generados vía ajax y como puedo implementarlo
gracias
:sur:
En el ejemplo que yo puse, solamente necesitas agregar una regla para elementos que sean de X clase, por ejemplo.
$.validator.addClassRules({
test: {tuRegla: true }
});
donde `test` es el nombre de la clase y `tuRegla` es el metodo custom method que defini anteriormente.
Luego, solo agregas esa clase a los elementos que generes dinamicamente
$('form div').append("<input type='text' class='test' ");
El plugin guarda los resultados de la validación en un objeto mapa y cuyas propiedades son nombradas usando el atributo `name` de cada elemento validado. Así que es necesario nombrar los elementos generados dinamicamente. He actualizado el ejemplo aqui: http://jsfiddle.net/jaimem/ucxmz/3/ (http://jsfiddle.net/jaimem/ucxmz/3/)
En el screenshot hay 3 inputs, nombrados `in-x` (zero index). Solo `in-1` ha pasado la validación.
(http://i.minus.com/iB0iZeyO0bQ0U.png)