Foros del Web » Programando para Internet » PHP »

preg_match y eregi

Estas en el tema de preg_match y eregi en el foro de PHP en Foros del Web. Hola, tengo una consulta para ver si me podeis explicar porque de una forma si funciona y de otra no. Tengo esto con preg_match que ...
  #1 (permalink)  
Antiguo 24/08/2010, 14:20
 
Fecha de Ingreso: diciembre-2006
Mensajes: 173
Antigüedad: 17 años, 3 meses
Puntos: 2
preg_match y eregi

Hola, tengo una consulta para ver si me podeis explicar porque de una forma si funciona y de otra no.

Tengo esto con preg_match que si funciona:
Código PHP:
if ( !preg_match("/^[0-9 a-z A-Z,$-:. _']+$/" 
y si le añado los acentos y la ñ no me funciona:
Código PHP:
if ( !preg_match("/^[0-9 a-z A-ZáéíóúÁÉÍÓÚñÑ,$-:. _']+$/" 
en cambio si lo hago con eregi si que me funciona perfectamente:
Código PHP:
if ( !eregi("^[a-zA-ZáéíóúÁÉÍÓÚñÑ 0-9 ,._]" 
Alguien me podria explicar porque no me funciona como lo estaba poniendo con preg_match o decirme si lo estoy haciendo bien con eregi.

Gracias!!
  #2 (permalink)  
Antiguo 24/08/2010, 15:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: preg_match y eregi

¿que mejor explicación que leer el manual?

http://php.net/pcre
http://php.net/ereg

la diferencia real es que EREG es obsoleto, y bueno... funciona, pero es malo...

ahora, PCRE es lo que se soporta actualmente.. y hay un pequeño truco: aprende expresiones regulares, si no lo estudias seguramente seguirás inmerso en las tinieblas del pasado...

¿porque?

tal ves con EREG era necesario listar los acentos y tildes manualmente para funcionar, pero eso traía problemas por las codificaciones de archivos, cosas de antaño, etc....

entonces, ¡PCRE no funciona si listamos acentos y tildes, ¿pero es mejor?!
R: ¡claro!!!

solo hay que saber -previo estudio claro- que en lugar de listar los caracteres latinos manualmente se pueden usar modificadores universales como \p{L}

y así es... dicho modificador dentro de la expresión equivale a todos los acentos y tildes habidos y por haber... así que ya no tienes que desperdiciar tiempo listando dicho caracteres en la expresión, esa es la razón por la cual PCRE es muy superior a EREG!!


bueno, la idea es que usar PCRE es lo mas sano y flexible actualmente, y así será la tendencia.... ¡a estudiar se ha dicho!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/08/2010, 15:09
 
Fecha de Ingreso: diciembre-2006
Mensajes: 173
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: preg_match y eregi

Creo que te he entendido...
entonces solo tengo que añadir \p{L} para que me acepte acentos y ñ

es correcto no?
  #4 (permalink)  
Antiguo 24/08/2010, 15:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: preg_match y eregi

claro que es correcto, sin embargo te invito a investigar y buscar referencias al respecto, que, bastantes hay en Internet...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 24/08/2010, 15:21
 
Fecha de Ingreso: diciembre-2006
Mensajes: 173
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: preg_match y eregi

Perfecto!!

Lo solucione poniendolo asi:
Código PHP:
if ( !preg_match("/\p{L}[0-9 a-z A-Z,$-:. _']+$/" 
Muchas gracias por tu ayuda pateketrueke.

Saludos!!
  #6 (permalink)  
Antiguo 24/08/2010, 15:28
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: preg_match y eregi

if ( !preg_match("/\p{L}[0-9 a-z A-Z,$-:. _']+$/"


estas repitiendo letras y asiendo incongruente tu regex... \pL sirve para todas las letras.. no es necesario que le vuelvas a decir de la a-z
seria algo asi

Código PHP:
if(!preg_match("/[\pL\d,$-:._']+$/"  ... 
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 25/08/2010, 05:05
 
Fecha de Ingreso: diciembre-2006
Mensajes: 173
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: preg_match y eregi

Ah vale perfecto y comprendido!!

el \pL para todas las letras con acentos incluidas y ñ
y el \d para los digitos (0-9)

Muchas gracias Hidek1,

Saludos!

PD:
En el aporte de expresiones PCRE de este mismo foro:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/

faltaria el \pL no? lo digo como comentario.

Etiquetas: Ninguno
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:45.