Ver Mensaje Individual
  #7 (permalink)  
Antiguo 04/12/2011, 21:11
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 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