Foros del Web » Programando para Internet » Javascript » Frameworks JS »

problema con la expresiones regulares+validacion

Estas en el tema de problema con la expresiones regulares+validacion en el foro de Frameworks JS en Foros del Web. Hola, como podria validar con expresiones regulares que solo me acepte numeros, la letra Código: k K mayuscula o minuscula y el guion Código: - ...
  #1 (permalink)  
Antiguo 02/12/2011, 13:08
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 15 años
Puntos: 3
problema con la expresiones regulares+validacion

Hola, como podria validar con expresiones regulares que solo me acepte numeros, la letra
Código:
k K
mayuscula o minuscula y el guion
Código:
-
, la tecla de espacio y para borrar en el teclado. Tambien en otra expresion que unicamente me acepte letras, tecla de espacio y para borrar en el teclado

hasta ahora tengo esto, pero no me funciona
primero me aseguro que mi checkbox este seleccionado y luego comparo lo que lleva el campo de texto valorCodigo, si unicamente van numeros, la K o k y el guion es verdadero si no es falso, pero no funciona
quien me podria ayudar con eso y agregar que acepte la tecla de espacio y para borrar en el teclado, tambien con la segunda expresion que no trabaja.
Estoy usando Jquery y recientemente aprendiendo expresiones regulares.


PD: no es obligacion que siempre se escriba la letra o el guion, pero es necesario que se pueda escribir en caso que se necesite.
Código PHP:
var expresion= /[^0-9-k-K_]/
var 
expresion1=/[^A-Z-a-z]/
 if($(
'#miCheckbox').attr('checked') == true || $("#valorCodigo")==expresion)
 {
       
alert('El campo  valido.');
 }
else
{
alert(' campo  no valido.');
}



if($(
'#miCheckbox1').attr('checked') == true || $("#valorCodigo1")==expresion1)
 {
       
alert('El campo  valido.');
 }
else
{
alert(' campo  no valido.'); 
  #2 (permalink)  
Antiguo 03/12/2011, 19:47
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 15 años
Puntos: 3
Respuesta: problema con la expresiones regulares+validacion

ayuda (
  #3 (permalink)  
Antiguo 03/12/2011, 20:39
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 11 años, 10 meses
Puntos: 1485
Respuesta: problema con la expresiones regulares+validacion

buenas...
de acuerdo a como estas realizando la validación, no comprendo para que quieres controlar las teclas pulsadas; específicamente las teclas space bar y backspace. me parece a mí, la validación que quieres realizar es por contenido y no por filtración de teclas. primero, el proceso esta mal hecho, no puedes comparar el objeto devuelto por jquery y el objeto RegExp -la expresión en si- porque obviamente son dos objetos distintos. debes usar el método test para comprobar que el patrón coincide con el contenido del campo. y segundo, el patrón esta mal formulado. el guión dentro de un par de corchete se utiliza para declarar un rango de caracteres. por tanto es inválido declarar algo como 0-9-k-K. el rango de los números esta bien, pero el resto no. para declarar el resto de los caracteres simplemente debes escribirlo secuencialmente con excepción de aquellos que tengan un significado particular en las expresiones. para esos casos, debes escaparlo con un backslash -diagonal inversa- para que la considere como literal. la expresión se escribe así: /[^0-9kK\-]/. la otra expresión te la dejo para que practiques.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 03/12/2011, 22:52
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 15 años
Puntos: 3
Respuesta: problema con la expresiones regulares+validacion

Gracias :), estaba cometiendo un error al intentar validar la tecla de espacio y borrado, estaba viendo la pagina que me has dado y el metodo test busca coincidencia en una cadena. Pero si fuera un valor numerico que se pasa en el metodo ¿como deberia comprobar con el metodo test?
gracias

ya que esto me devuelve false, pienso que deberia devolver true porque en el patron tengo el rango de valores numericos.
estoy viendo hace dos dias esto de las expresiones regulares
Código PHP:
<html>
<
body>

<
script type="text/javascript">

var 
str=123;
var 
patt=/[^0-9kK-]/;
var 
result=patt.test(str);
document.write("Returned value: " +  result); 



</script>
</body>
</html> 
  #5 (permalink)  
Antiguo 03/12/2011, 23:11
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 11 años, 10 meses
Puntos: 1485
Respuesta: problema con la expresiones regulares+validacion

Cita:
Pero si fuera un valor numerico que se pasa en el metodo ¿como deberia comprobar con el metodo test?
sigue siendo el mismo proceso. de hecho, el método test intentará convertir el valor a string cuando no sea de dicho tipo. por tanto, un número convertido a string en la mayoría de los casos se representa igual.

Cita:
ya que esto me devuelve false, pienso que deberia devolver true porque en el patron tengo el rango de valores numericos.
si te devuelve false es porque no encontró ninguna coincidencia de acuerdo al patrón. fijate que el patrón dice, buscar cualquier caracter que no coincida con los indicados en la clase. comunmente se le denomina clase al patrón que consiste de un par de corchetes ([...]). dentro de los corchetes, el acento circunflejo al inicio significa negación. por tanto, se busca cualquier caracter que no sean los de la clase. en este caso, lo que debes hacer es invertir el valor booleano devuelto por el método test.

te recomiendo que le dediques tiempo a cualquier tutorial de expresiones regulares. uno que me parece bastante completo y detallado, http://www.regular-expressions.info/tutorial.html. en dicho material debes tener cuidado porque no todo aplica en javascript pero es suficiente como para desarrollar una buena base y aplicarla en javascript.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 04/12/2011, 18:24
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 15 años
Puntos: 3
Respuesta: problema con la expresiones regulares+validacion

Muchas gracias por la ayuda y he estado leyendo el tutorial, pero tengo esta consulta: en mi patron necesito dejar que me acepte numeros, guion y la letra kK, asi que en este caso deberia devolverme verdadero. Pero tendria que recibir falso si se ingresa el rango de letras de
Código:
a
hasta la
Código:
j
y de
Código:
 l
hasta la
Código:
Z
y que me niegue aquellos simbolos que agregue. Sin embargo, si ingreso unicamente la letra k me da falso y deberia darme verdadero, mas si coloco "123k" da verdadero. Asimismo si escribo en la cadena 123lzA me da verdadero y deberia ser falso, porque ese rango de letras las estoy negando.


Mi idea final es unicamente aceptar las letras kK, de 0 a 9 y el guion, asi en este caso mi formulario deberia dejar que se ingresara la información en la BDD, y en caso que aparezca algún caracter de los que niego en el patron me salga un mensaje de valor no aceptado.
¿en donde me equivoco?
gracias
Código PHP:
<html>
<
body>

<
script type="text/javascript">

var 
str="k";

var 
patt=/[0-9kK-]+[^a-jA-Jl-zL-Z*+/.,:_]/;
var 
result=patt.test(str);
document.write("Returned value: " +  result); 


</script>
</body>
</html> 

Última edición por -thor-; 04/12/2011 a las 18:31
  #7 (permalink)  
Antiguo 04/12/2011, 21:11
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 11 años, 10 meses
Puntos: 1485
Respuesta: problema con la expresiones regulares+validacion

estas fallando en el patrón. la razón es muy simple, el patrón entiende que debes ingresar al menos dos caracteres. el inicio del patrón esta "bien" ([0-9kK-]+) pero el resto ([^a-jA-Jl-zL-Z*+/.,:_]) es lo que te obliga a ingresar un caracter adicional. de hecho, esa última parte no tiene razón o propósito. en la expresión que te ocupa, no tienes porque detectar caracteres válidos e inválidos. realiza una de las dos pero no ambas. si quieres determinar que todos los caracteres sean válidos, necesitas anclar la expresión al inicio y final del string para que el patrón considere el string completo y no una porción de ella. si vas a detectar por caracteres inválidos, solamente debes de crear una clase negada, tal como la segunda parte del patrón actual.

para que lo puedas entender mejor, digamos que queremos aceptar los números del 0-9 y letras a-f.

Código:
// las variables valid e invalid son dos string. 
// el primero deberia producir true porque cumple con el criterio
// mientras que el segundo debe producir false porque contiene espacios
var valid = "0123456789abcdef";
var invalid = "0123 456789 abcdef";

// el siguiente patron devuelve true para ambas variables
// porque el patron no esta anclado al inicio y fin del string.
// significa que para la variable invalid, se esta evaluando por porciones
var pattern = /[0-9a-f]+/;
pattern.test(valid); // true
pattern.test(invalid); // true
// para el case de invalid, el patron esta analizando la porcion 0123


// en la siguiente expresion, invalid devuelve false
// porque a diferencia del anterior, se esta considera el string de inicio a fin
// notese en la expresion los simbolos ^$. el cual, el acento circunflejo 
// (fuera de los corchetes) significa anclar al inicio y el signo dolar 
// anclar al final
var pattern = /^[0-9a-f]+$/
pattern.test(valid); // true
pattern.test(invalid); // false


// los ejemplos anteriores consisten en determinar que todos los caracteres sean validos.
// los proximos ejemplos consisten en determinar si existe algun caracter invalido.
// usaremos las mismas variables: valid e invalid.

// notese que el acento circunflejo esta dentro de los corchetes
var pattern = /[^0-9a-f]/;
pattern.test(valid); // false, porque no encontro ningun caracter fuera de los indicados
pattern.test(invalid); // true, porque encuentra un espacio en el string
cualquiera de ambas formas, detectar caracteres válidos o inválidos, puedes emplearlas pero debes analizar bien como vas a crear la estructura lógica de tu script. ahora te corresponde a ti aplicarlo a tus requisitos.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 04/12/2011 a las 21:33
  #8 (permalink)  
Antiguo 05/12/2011, 06:23
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 15 años
Puntos: 3
Respuesta: problema con la expresiones regulares+validacion

zerokilled muchas gracias por el tiempo dedicado a enseñarme :), ya he entendido y al fin logre realizar una buena comprobacion en mi proyecto gracias a tu ultimo ejemplo. Gracias.

Una ultima consulta, ¿que ventajas a parte de una validacion màs personalizada pueden traer las expresiones regulares, asì como que clases de desventajas piensas que puedan dar al momento de validar?
  #9 (permalink)  
Antiguo 05/12/2011, 13:22
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 11 años, 10 meses
Puntos: 1485
Respuesta: problema con la expresiones regulares+validacion

personalmente, desconozco de alguna situación particular como para considerar las expresiones regulares una desventaja. en la mayoría de los casos son soluciones efectivas a problemas que requieren cierta elaboración, reduciendo así la complejidad del script necesario. por ejemplo, validar un email. es mi opinión, porque me he encontrado con quienes que opinan un tanto distinto.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: expresiones, funcion, jquery
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:04.