Foros del Web » Programando para Internet » PHP »

Problema con delimitadores en expresiones regulares

Estas en el tema de Problema con delimitadores en expresiones regulares en el foro de PHP en Foros del Web. Tengo un problema con un codigo que me da error: Tengo la siguiente funcion: Código PHP:      function  caracteresValidos ( $campo ,  $patron )     { ...
  #1 (permalink)  
Antiguo 05/06/2007, 12:44
 
Fecha de Ingreso: enero-2006
Ubicación: Maracay, Edo. Aragua
Mensajes: 206
Antigüedad: 18 años, 3 meses
Puntos: 0
Pregunta Problema con delimitadores en expresiones regulares

Tengo un problema con un codigo que me da error:

Tengo la siguiente funcion:
Código PHP:
    function caracteresValidos($campo$patron)
    {
    if(
preg_match_all($patron$campo$matches)) 
        return 
true;
    else
        return 
false;
    } 
Le como parametros cualquier valor numérico y le paso como patron la expresión regular:

"/^[0-9]{5,10}$/"

Para indicarle que permita cualquier valor numerico con una longitud mínima de 6 caracteres y máxima de 10.

La cosa es que me da el siguiente error y no sé por qué:

Código:
Warning: preg_match_all() [function.preg-match-all]: No ending delimiter '/' found in C:\wwwroot\BUHOWeb\class\class.validar.php on line 155
La linea 155 es donde se encuentra la funcion "preg_match_all".

Al eliminar {5,10} (los cuantificadores) de la expresión, deja de darme error

Alguien puede decirme si estoy haciendo algo mal?

Saludos

Última edición por thisisalexis; 05/06/2007 a las 13:00
  #2 (permalink)  
Antiguo 05/06/2007, 13:38
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Problema con delimitadores en expresiones regulares

No tengo mucha experiencia con las PREG (por lo general uso las funciones ereg*), solo te puedo sugerir algunas cosas para probar:

1.- podés cambiar el delimitador a algún otro caracter y ver si te pasa lo mismo, por ejemplo dejar el patrón como
"!^[0-9]{5,10}$!"

2.- podés poner el patrón entre comillas simples, pienso que, aunque no debería suceder, quizás PHP está intentando de alguna forma una sustitución de variable con el $, por lo que ponerlo entre comillas simples te diría si el problema es ese.

Solo un detalle más para comentar: {5,10} implica "mínimo 5, máximo 10", no mínimo 6 como escribiste.


Saludos.
  #3 (permalink)  
Antiguo 05/06/2007, 14:13
 
Fecha de Ingreso: enero-2006
Ubicación: Maracay, Edo. Aragua
Mensajes: 206
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Problema con delimitadores en expresiones regulares

Intenté lo que me recomendaste y nada ¡Lo he intentado de 100 maneras! pero nada. Esa expresión incluso la saqué de una página donde dicen que funciona perfectamente pero a mi me da siempre el mismo error cada vez que coloco los {x,x}, independientemente del lugar donde los coloque, usando o no subclases, como sea, las llaves me producen siempre el mismo error.

Si sabes alguna otra forma de hacer lo que intento hacer (utilizando expresiones regulares) te agradezco que me ayudes. Yo mientras tanto voy a seguir leyendo y tratando de averiguar por qué me da este error, porque me he leido varios tutoriales de expresiones regulares y todos apuntan hacia la forma como lo estoy haciendo yo.

Saludos y gracias.
  #4 (permalink)  
Antiguo 05/06/2007, 14:29
 
Fecha de Ingreso: enero-2006
Ubicación: Maracay, Edo. Aragua
Mensajes: 206
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Problema con delimitadores en expresiones regulares

Que tal Alvlin. Dandole la vuelta al asunto me he dado cuenta que la expresión está bien, el problema es mi función o la forma como PHP lo interpreta, no sé.

Fíjate que en lugar de pasarle la expresión como parámetro, la definí dentro de la función caracteresValidos como una variable y así si me funciona.

Supongo que en PHP no se pueden pasar llaves {} como parametros porque dará algun error. Si bien me funciona, no es lo óptimo, porque necesito que la expresión se defina desde afuera, sino tendría que hacer demasiadas funciones practicamente haciendo lo mismo.

Volviendo a la forma como intenté hacerlo inicialmente, pasando la expresión como parámetro, coloqué antes de cada {} un \ pero da el mismo error.

Bueno, cualquier recomendacion que tengas será bien recibida, gracias.
  #5 (permalink)  
Antiguo 05/06/2007, 19:02
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Problema con delimitadores en expresiones regulares

Te cuento que no comprendo por qué no te funciona, me hice un archivo php con este código:
Código PHP:
<?php
 
function caracteresValidos($campo$patron)
    {
    if(
preg_match_all($patron$campo$matches)) 
        return 
true;
    else
        return 
false;
    } 

$coso caracteresValidos(12345"/^[0-9]{5,10}$/");

var_dump($coso);
?>
Y no tengo ningún error con la función, obtengo la salida de var_dump:
bool(false)

Así que creo que deberías verificar que le estés pasando correctamente el parámetro. Quizás al llamar a la función no le estás pasando lo que deberías...


Saludos.
  #6 (permalink)  
Antiguo 06/06/2007, 05:22
 
Fecha de Ingreso: enero-2006
Ubicación: Maracay, Edo. Aragua
Mensajes: 206
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Problema con delimitadores en expresiones regulares

Oops! mala mia!...uo sabía que tenía la respuesta en la cara y que no podía verla.

Fíjate, no voy a entrar en detalles, pero por X razón, ese parámetro antes de llegar a la función caracteresValidos era procesado por otra función que separaba la cadena justo donde se encontrara una coma (,)

Obviamente al yo poner {5,10} me cortaba la cadena justo en la coma y el parámetro sólo era pasado hasta allí, por eso el error decía que no encontraba un delimitador de cierre, porque el / de cierre no era pasado como parte del parámetro.

Bueno muchas gracias por tu ayuda! Saludos
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 23:02.