Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: Shell Root en 14 Enero 2011, 00:55 AM

Título: Algo raro con ExpReg
Publicado por: Shell Root en 14 Enero 2011, 00:55 AM
Si tengo la siguiente expresion regular -no importa si sea buena o mala, sólo es una curiosidad-.
RegExp: [a-zA-Z]*, la construí de tal modo de que sólo acepten una cadena en minúscula y/o mayúscula. -eso supongo XD-

Ahora la combino con PHP de la siguiente forma,
Código (php) [Seleccionar]
  function setVPoC($sPoC){
    $sExpReg = "/[a-zA-Z]*/";
    if(preg_match($sExpReg, $sPoC)){ return 1; } else { return 0; }
  }


pero cuando hago lo siguiente,
Código (php) [Seleccionar]
  echo setVUsername("shel1root")."\n";
el resultado es,
Código (perl) [Seleccionar]
alex@alex:~/Escritorio$ php PoC.php
1


WTF!
Título: Re: Algo raro con ExpReg
Publicado por: raul338 en 14 Enero 2011, 00:59 AM
Y esta bien, primero porque no estas limitando entre principio y final de linea (con ^ y $ )

por lo que el match te devolveria "shel" nada mas :P
Título: Re: Algo raro con ExpReg
Publicado por: Shell Root en 14 Enero 2011, 01:06 AM
mmm, pero entonces supongamos que también pueda ingresar números, ya sea al inicio, en el medio o al final de la cadena. Además de los espacios.
Título: Re: Algo raro con ExpReg
Publicado por: raul338 en 14 Enero 2011, 01:15 AM
Si, la expresion regular que pusiste evalua si en algun lugar de la cadena pasa existen letras de la "a" a la "z" y "A" a "Z"
si quieres que solamente pongan letras, pon que sea entre inicio y fin de linea, y hayan 1 o mas

^[a-zA-Z]+$

^ Inicio de linea
[]  ...
+ 1 o mas veces (* es 0 o mas)
$ Fin de linea
Título: Re: Algo raro con ExpReg
Publicado por: ~ Yoya ~ en 14 Enero 2011, 01:19 AM
Código (php) [Seleccionar]
<?php

$sExpReg 
"/[a-zA-Z]*/";
if(
preg_match($sExpReg'1ho la2')){ echo 'Si'; } else { return 'No'; }


?>

Salida:
Si
Esa patrón [a-zA-Z]*, solo busca que existan carácter de la A hasta la Z, no importa que sea en el medio, al principio o al final, porque no le indicas que la cadena solo deba existir carácter de la A hasta la Z, solo que PUEDA existir carácter y si no existe dara por valida la la regexp debido al cuantificador *.

Código (php) [Seleccionar]
<?php

$sExpReg 
"/[a-zA-Z]*/";
if(
preg_match($sExpReg'12')){ echo 'Si'; } else { return 'No'; }


?>


Salida:
Si

Saludos.
Título: Re: Algo raro con ExpReg
Publicado por: Castg! en 14 Enero 2011, 20:11 PM
Código (php) [Seleccionar]
  function setVPoC($sPoC){
    $sExpReg = "/^([a-zA-Z]*)$/";
    if(preg_match($sExpReg, $sPoC)){ return 1; } else { return 0; }
  }
  echo setVPoC("shel1root")."\n";


asi te funciona?
Título: Re: Algo raro con ExpReg
Publicado por: ~ Yoya ~ en 14 Enero 2011, 21:20 PM
Castg!, te recomiendo que ocupes Passive Group (http://yoyahack.blogspot.com/2010/10/passive-group-expresiones-regulares.html).