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,
function setVPoC($sPoC){
$sExpReg = "/[a-zA-Z]*/";
if(preg_match($sExpReg, $sPoC)){ return 1; } else { return 0; }
}
pero cuando hago lo siguiente,
echo setVUsername("shel1root")."\n";
el resultado es,
alex@alex:~/Escritorio$ php PoC.php
1
WTF!
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
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.
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
<?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 *.
<?php
$sExpReg = "/[a-zA-Z]*/";
if(preg_match($sExpReg, '12')){ echo 'Si'; } else { return 'No'; }
?>
Salida:
Si
Saludos.
function setVPoC($sPoC){
$sExpReg = "/^([a-zA-Z]*)$/";
if(preg_match($sExpReg, $sPoC)){ return 1; } else { return 0; }
}
echo setVPoC("shel1root")."\n";
asi te funciona?
Castg!, te recomiendo que ocupes Passive Group (http://yoyahack.blogspot.com/2010/10/passive-group-expresiones-regulares.html).