Algo raro con ExpReg

Iniciado por Shell Root, 14 Enero 2011, 00:55 AM

0 Miembros y 2 Visitantes están viendo este tema.

Shell Root

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!
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

raul338

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

Shell Root

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.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

raul338

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

~ Yoya ~

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.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Castg!

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?

~ Yoya ~

Castg!, te recomiendo que ocupes Passive Group.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.