Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Duda muy simple con preg_match

Estas en el tema de Duda muy simple con preg_match en el foro de PHP en Foros del Web. Hola a todos. Tengo un problemilla en el que llevo 2 horas metido y no quiero dedicarle más tiempo porque es una estupidez. Necesito validar ...
  #1 (permalink)  
Antiguo 14/01/2014, 05:43
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 9 meses
Puntos: 1
Duda muy simple con preg_match

Hola a todos. Tengo un problemilla en el que llevo 2 horas metido y no quiero dedicarle más tiempo porque es una estupidez.

Necesito validar un campo en php. Este campo está creado a partir de exactamente 20 letras mayúsculas y números con una función que utiliza este conjunto de caracteres:

Código otro:
Ver original
  1. ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Intento utilizar la siguiente expresión regular:

Código PHP:
Ver original
  1. $patron = "/^[A-Z0-9]{20}$/";
  2. if (!preg_match($patron, $_GET["clave"])) {
  3.     echo "Link incorrecto";
  4.     exit;
  5. }

He probado varias formas, pero ninguna lo valida. ¿Dónde la estoy cagando?

Gracias.
  #2 (permalink)  
Antiguo 14/01/2014, 08:06
 
Fecha de Ingreso: julio-2011
Ubicación: Santiago, Chile.
Mensajes: 95
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Duda muy simple con preg_match

Cita:
Iniciado por DandyCC Ver Mensaje
Hola a todos. Tengo un problemilla en el que llevo 2 horas metido y no quiero dedicarle más tiempo porque es una estupidez.

Necesito validar un campo en php. Este campo está creado a partir de exactamente 20 letras mayúsculas y números con una función que utiliza este conjunto de caracteres:

Código otro:
Ver original
  1. ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Intento utilizar la siguiente expresión regular:

Código PHP:
Ver original
  1. $patron = "/^[A-Z0-9]{20}$/";
  2. if (!preg_match($patron, $_GET["clave"]))
  3. {
  4.     echo "Link incorrecto";
  5.     exit;
  6. }

He probado varias formas, pero ninguna lo valida. ¿Dónde la estoy cagando?

Gracias.
yo que tu lo ordenaria un poco mas ...

Código PHP:
$clave=$_GET['clave'];
$patron "/^[A-Z]{0,9}{20}$/";
if (!
preg_match($patron$clave))
{
    echo 
"Link incorrecto";
    break;

ve que tal te va con eso... saludos.
  #3 (permalink)  
Antiguo 14/01/2014, 09:01
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Duda muy simple con preg_match

No funciona. He probado eso y igual pero poniendo

Código PHP:
Ver original
  1. $patron = "/^[A-Z][0,9]{20}$/";

Que creo que es a lo que te referías, pero tampoco :(
  #4 (permalink)  
Antiguo 14/01/2014, 10:05
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Duda muy simple con preg_match

¿La clave debe tener 20 caracteres entre números y letras mayúsculas en cualquier orden o primero va un bloque de mayúsculas y luego otro de números?

Si es lo primero, con tu expresión regular bastaría.

Código PHP:
Ver original
  1. $patron = "/^[A-Z\d]{20}$/";
  2. $string = "SDFASFDFAD87ASDD4534";
  3. echo !preg_match($patron, $string) ? "Mal" : "Bien"; //Imprime "Bien"

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 14/01/2014, 10:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda muy simple con preg_match

Hay que notar que las expresiones regulares son un sub-lenguaje totalmente aparte con sus propias reglas y sintaxis, no pertenecen al foro de PHP sino al sub-foro de expresiones regulares.

Cabe destacar que la expresión ^[A-Z0-9]{20}$ espera exactamente 20 caracteres, entre letras y números.

Código PHP:
Ver original
  1. $regex = '/^[A-Z0-9]{20}$/';
  2. $test = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  3.  
  4. echo preg_match($regex, $test) ? 'OK' : 'NO';

Es decir, el código de arriba jamás va a validar debido a que la cadena de prueba supera por mucho los 20 caracteres, así de simple.

Ahora, si la expresión debería contar "20 caracteres o más" debes cambiar el rango del grupo a {20,} para que así resulte.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 14/01/2014, 10:31
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Duda muy simple con preg_match

Bah! Soy imbécil del todo! Por más que revisé la expresión regular no encontraba el error, y ya lo encontré. El problema no estaba en la expresión regular en sí, si no en lo que le llegaba (por GET). Ya está solucionado.

Igualmente, gracias a todos por vuestro tiempo.

@pateketrueke, no encontré ningún foro de expresiones regulares y al estar usando php pensé que el mejor sitio era este. Mis disculpas.
  #7 (permalink)  
Antiguo 14/01/2014, 10:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda muy simple con preg_match

Aquí está el sub-foro: RegExp
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 14/01/2014, 12:22
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Duda muy simple con preg_match

Gracias! No lo ví en la página principal. Me vendrá muy bien.

Etiquetas: simple
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 19:30.