Foros del Web » Programando para Internet » PHP »

Expresiones regulares

Estas en el tema de Expresiones regulares en el foro de PHP en Foros del Web. Buenas :) Aquí seguimos profundizando en las bases de php y cada vez sabiendo mas y desconociendo mas aun . Como bien comente en mi ...
  #1 (permalink)  
Antiguo 08/03/2008, 06:52
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 16 años, 4 meses
Puntos: 11
Expresiones regulares

Buenas :)

Aquí seguimos profundizando en las bases de php y cada vez sabiendo mas y desconociendo mas aun .

Como bien comente en mi duda anterior, estoy haciendo una funcion "general" para recibir datos de un formulario de contacto evitando campos vacios, etiquetas html, etc...

Ahora estoy en el paso de , si un usuario ha de introducir un "nombre" , sean solo letras como es normal , y restringir el introducir numeros, y distintos simbolos de este modo.

No se si lo estoy enfocando mal , o me estoy saltando algo que no he visto por ningun lado....

Doy por hecho que esto se consigue mayormente con las expresiones regulares y asi lo estoy intentando pero me sucede lo siguiente:

Estoy trabajando con las funciones compatibles con Perl y no logro entender el alcance de estas funciones o como dije, algo se me escapa...

Yo tengo esto :

Código:
$cadena="/(\w{2,})/"; 

if(!preg_match($cadena,$_REQUEST['name'])){              //ESTANDAR PERL. HE DE ESPECIFICAR QUE BUSQUE 2 NUMEROS PORQUE CUANDO ENCUENTRA LA PRIMERA COINCIDENCIA PARA, POR TANTO HE DE ASEGURARME Q                                                            QUE BUSQUE LOS 2 NUMEROS Y NO 1 Y YA PARE
echo "No ha introducido un valor correcto";
}else echo " Ha introducido un valor correcto";
Yo pretendia en un principio que segun la expresion regular, sean las letras , mayusculas y minusculas, con acentos, ñ´y demas.. y que busque minimo 2 en adelante.

La cuestion es que claro , la funcion preg_match busca encontrar la primera coincidencia y entonces se para... entonces si el usuario introdujera Pepe,
la funcion al cojer Pe, ya la daria por valido.

Necesitaba una funcion que siguiera buscando todas las coincidencias y asi como tal esta la funcion preg_match_all , que devuelve matrices con las distintas coincidencias ....

Asi que si yo introduzco Pepe, devolvera las matrices:
Pepe

Pero si yo introduzco como nombre Pepe4, me seguira devolviendo Pepe, pero el 4 al no ser coincidencia ni lo huele.

Llegado a este punto pense en usar el planteamiento inverso : Es decir, usar una expresion regular que abarque todo menos las letras, acentos , ñ, etc.. y si encontraba una coincidencia habia introducido obviamente un valor incorrecto.

Pero debe haber una forma de hacerlo de forma directa que no logro entender.



No se si me habre explicado bien , pero es que llevo con esto un cacao que tela :P.Creo entender la teoria pero se me escapa algo o no estoy muy espeso para dar con lo que me falta
  #2 (permalink)  
Antiguo 08/03/2008, 13:46
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 10 meses
Puntos: 60
Re: Expresiones regulares

Para este caso te bastaría con la función ereg(), ya que para una validación con un ereg a mi parecer te sobra y te basta, creo que lo estas viendo muy dificil, cuando en realidad tu debes de olvidarte de las variantes.. usando exprensiones regulares, a que me refiero con las variantes, a que tu decides que es una cadena valida.. y cual no.. por ejemplo un nombre valido tendria estas reglas...

1.- Debe de iniciar siempre con una letra (solo eso nada mas)
2.- debe de contener letras solamente y acentos
3.- una longitud minima y maxima
4.- aceptar solo un espacio intermedio si es que tuviera 2 nombres

Entonces podrias hacer algo como..

Código PHP:
<?php
function isNombre($cadena)
{
if(
ereg('^[a-zA-ZáéíóúÁÉÍÓÚñÑ]{2,20}([ ]{1})?([a-zA-ZáéíóúÁÉÍÓÚñÑ]{2,20})?$',$cadena))
    {
    return 
true;
    }else
        {
        return 
false;
        }
}
$cadenaPrueba 'Oscar';
echo (
isNombre($cadenaPrueba))? 'El dato es valido''El dato es invalido';
?>
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador

Última edición por _ssx; 08/03/2008 a las 13:52
  #3 (permalink)  
Antiguo 10/03/2008, 15:14
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 16 años, 4 meses
Puntos: 11
Re: Expresiones regulares

Buenas!

Gracias por responder y perdón por el retraso en contestar y agradecertelo ;).

Ese mismo sabado por la tarde, segui trasteando unas horas y al final me di cuenta que lo planteaba mal y que no se por qué el parametro \w de Perl , no debo saber como implementarlo porque no consegui hacerlo funcionar así.

Yo llegue a hacer este:
Código:
$texto="aauñnao sdsdáéÑÑÜdad";
$cadena="/^([a-zA-Z\ñ\Ñ\á\é\í\ó\ú\Á\É\Í\Ó\Ú\ä\ë\ï\ö\ü\Ä\Ë\Ï\Ö\Ü]+\040?)+$/";

$mensaje=(preg_match($cadena,$texto)) ? "Correcto!!" : "Dato Incorrecto";
echo $mensaje."<br/><br/>";
Se parece bastante al tuyo , tu incluyes el espacio de otro modo y pones un limite de caracteres ;), pero desempeñan exacta funcion me parece :).

Un saludo y muchas gracias
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 06:24.