Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] expresion regular php

Estas en el tema de expresion regular php en el foro de PHP en Foros del Web. No se como montar bien la expresion regular siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $dato = "2222-1230.fr" ;   if ( preg_match ( "/^{[0-9]}4+[-]+[0-9]+(.es|.ar|.fr)+$/" ...
  #1 (permalink)  
Antiguo 23/09/2015, 07:02
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 13 años, 2 meses
Puntos: 5
expresion regular php

No se como montar bien la expresion regular siguiente:



Código PHP:
Ver original
  1. $dato="2222-1230.fr";
  2.  
  3. if(preg_match("/^{[0-9]}4+[-]+[0-9]+(.es|.ar|.fr)+$/",strtoupper($dato))==TRUE){
  4.     echo"correcto";
  5. }

Lo que intento es validar seria que hata el - deberia contener solo numeros y un total de 4 digitos, despues un guion medio (-) seguido de numeros del 0 al 9 y este ultimo puede acabar en .es, .ar, .fr

Gracias de antemano, saludos
  #2 (permalink)  
Antiguo 23/09/2015, 07:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: expresion regular php

Te comento que existe un sub-foro especializado de RegExp, ya que, aunque no lo sepas: es un sub-lenguaje embebido y tienes sus propias reglas que merecen estudio aparte.

Bueno, volviendo al tema debes simplificar al máximo tu expresión:
Cita:
1. deberia contener solo numeros y un total de 4 digitos
2. despues un guion medio (-)
3. seguido de numeros del 0 al 9 ¿cuantos? ¿es opcional?
4. este ultimo puede acabar en .es, .ar, .fr
Básicamente:
Cita:
1. ^\d{4}
2. \-
3. \d+
4. \.(?:es|ar|fr)$
Otro detalle grave en tu validación es que transformas todo a mayúsculas pero tu expresión no las incluye.

Por favor consulta la siguiente referencia: http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 23/09/2015, 07:29
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: expresion regular php

Gracias paketetrueke, no sabia que habia un subforo de RegExp, me mire el aporte que pusistes pero no consigo montar bien la expresion hice esto:



Código PHP:
Ver original
  1. $dato="2222-1230.fr";
  2.  
  3. if(preg_match("/^\d{4}+\-\d+\.(?:es|ar|fr)+$/",$dato){
  4.     echo"correcto";
  5. }
  #4 (permalink)  
Antiguo 23/09/2015, 07:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: expresion regular php

Bueno, pues tienes errores de sintaxis, ¿ya notaste que tus paréntesis en la condicional no están balanceados?

Además agregas cuantificadores casi sin razón alguna en la expresión, ¿por qué?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 23/09/2015, 07:48
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: expresion regular php

No se como concatenar las reglas hice esto:

Código PHP:
Ver original
  1. $dato="2222-1230.fr";
  2.  
  3. if(preg_match("/^\d{4}+(-)+[\d+]+[.(?:es|ar|fr)]$/",$dato){
  4.     echo"correcto";
  5. }
  #6 (permalink)  
Antiguo 23/09/2015, 07:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: expresion regular php

Yo no me refería a la expresión regular, ¿sigues sin ver el error de sintaxis?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 23/09/2015, 07:59
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: expresion regular php

Cita:
Iniciado por pateketrueke Ver Mensaje
Yo no me refería a la expresión regular, ¿sigues sin ver el error de sintaxis?
asi el parentesis final que me lo deje

Código PHP:
Ver original
  1. $dato="2222-1230.fr";
  2.  
  3. if(preg_match("/^\d{4}+(-)+[\d+]+[.(?:es|ar|fr)]$/",$dato)){
  4.     echo"correcto";
  5. }

pero sigue sin funcionar.
  #8 (permalink)  
Antiguo 23/09/2015, 08:11
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: expresion regular php

Lo consegui pero no se si hay una manera mejor

Código PHP:
Ver original
  1. $dato="2222-1230.fr";
  2.  
  3. if(preg_match("/^\d{4}+[-]+[\d+]+[.]+(?:es|ar|fr)$/",$dato)){
  4.     echo"correcto";
  5. }

pero me faltaria que no diferencia de mayusculas ni minusculas le añadi la i asi pero nada

Código PHP:
Ver original
  1. if(preg_match("/^\d{4}+[-]+[\d+]+[.]+(?:es|ar|fr)i$/",$dato)){
  2.     echo"correcto";
  3. }
  #9 (permalink)  
Antiguo 23/09/2015, 08:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: expresion regular php

Pues sí, pero ya arruinaste ahora la expresión regular y ahora debes dejarla como estaba.

Jamás coloqué grupos, ni corchetes, ni cuantificadores extra en lo que te expliqué: ¿por qué los colocas?

Básicamente era sólo poner la expresión en una sola linea:
Cita:
// ANTES
1. ^\d{4}
2. \-
3. \d+
4. \.(?:es|ar|fr)$

// DESPUÉS
^\d{4}\-\d+\.(?:es|ar|fr)$
Obviamente con los delimitadores correctos pero eso ya lo sabes.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 23/09/2015, 10:02
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: expresion regular php

No consigo hacerlo que no diferencie de mayúsculas y minúsculas.
  #11 (permalink)  
Antiguo 23/09/2015, 10:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: expresion regular php

Para eso debes agregar el modificador "i" después de los delimitadores, ¿por qué no consultas la referencia que te compartí?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 23/09/2015, 13:05
 
Fecha de Ingreso: agosto-2011
Mensajes: 306
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: expresion regular php

Muchas gracias pateketrueke al final lo consegui quedo asi:

Código PHP:
Ver original
  1. if(preg_match("/^\d{4}\-\d+\.(?:es|ar|fr)$/i",$dato)){
  2.     echo"correcto";
  3. }

Etiquetas: expresion, regular
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 15:16.