Foros del Web » Programando para Internet » PHP »

Expesiones regulares

Estas en el tema de Expesiones regulares en el foro de PHP en Foros del Web. Muy buenas. Tengo un registro de usuarios y quiero que los nombres de usuario sean en minúsculas y sin caracteres raros, , sin números, sólo ...
  #1 (permalink)  
Antiguo 23/03/2003, 11:41
Avatar de zarate  
Fecha de Ingreso: septiembre-2001
Ubicación: Madrid
Mensajes: 164
Antigüedad: 22 años, 7 meses
Puntos: 0
Expesiones regulares

Muy buenas. Tengo un registro de usuarios y quiero que los nombres de usuario sean en minúsculas y sin caracteres raros, , sin números, sólo letras.

Pero no quiero que me rechaze esos nombres sino que me los convierta. Es decir:

Zárate debería insertarse en la base como zarate.

He mirado los post de expresiones regulares del foro y encuentro que

Código PHP:
$out ereg_replace("é""e"$nombre); 
Eso me reemplazaría una é por una e. Y mi pregunta es si con una expresión regular puedo hacer que me las reemplaze todas, algo del estilo:

Código PHP:
$out ereg_replace("áéíóú""aeiou"$nombre); 
Eso, lo que hace es es buscar la cadena áéíóú, y , evidentemente, no la encuentra.

Si no la hay pues tendré que hacer una array con las letras acentuadas y otro con las sin acentuar y recorrerlo.... pero a lo mejor se puede hacer de una forma más "elegante".

Gracias
__________________
Zárate
  #2 (permalink)  
Antiguo 23/03/2003, 12:21
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola, zarate.

A ver si es esto lo que buscas:
Código PHP:
$out ereg_replace("(á)(é)(í)(ó)(ú)""\\1a\\2e\\3i\\4o\\5u"$nombre); 
Saludos,
  #3 (permalink)  
Antiguo 23/03/2003, 12:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Con expresiones regulares no te sabría decir como hacerlo .. Date cuenta que las expresiones regulares es un -psudo lenguaje- propio .. Si quieres estudiarlo:

http://www.ignside.net/man/php/regex.php

PHP lo único que hace es ponerte a tu disposición funciones para que las uses con PHP . como por ejemplo ereg_replace() y varias mas ..

Te propongo una solución .. Por supuesto haciendolo con una expresión regular seguro que sería mas óptimo ..

Basandome en un array con los caracteres que hay q sustituir por su equivalente:

Código PHP:
<?
$nombre
="Hóla BláBlí Bló blú éee aaa oo";

$caracteres=array('á'=>'a','é'=>'e','í'=>'i','ó'=>'o','ú'=>'u');
foreach (
$caracteres as $acentuado => $no_acentuado){
  
$nombre=str_replace($acentuado,$no_acentuado,$nombre);
}

$nombre=strtolower($nombre); // a minusculas todo ..

echo $nombre;
?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 06/04/2003, 05:55
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
No hay que complicarse con ER ni hacer cosas raras
PHP casi siempre tiene algo para hacer lo que queremos

Aca va en ejemplo de strtr, y le agregue algunos caracteres mas...
Código PHP:
$nombre strtr($nombre"àáâãäåèéêëìíîïòóôõöùúûüñ""aaaaaaeeeeiiiiooooouuuun"
http://www.php.net/strtr

Saludos!
  #5 (permalink)  
Antiguo 06/04/2003, 11:22
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Bueno, yo me hice esta función y trabaja bastante fácil. Así que si quieres modificarla para tus intenciones, adelante


Código PHP:
$varCaracteres = array ("/á/""/é/""/í/""/ó/""/ú/""/ñ/""/Á/""/É/""/Í/""/Ó/""/Ú/""/Ñ/""/[\n]/",);
$varCaracteresHTML = array ("&aacute;""&eacute;""&iacute;""&oacute;""&uacute;""&ntilde;""&Aacute;""&Eacute;""&Iacute;""&Oacute;""&Uacute;""&Ntilde;""<br>\r");

function 
textohtml ($texto)
    {
        
$texto preg_replace($GLOBALS["varCaracteres"], $GLOBALS["varCaracteresHTML"], $texto); 
        return 
$texto;
    } 
Saludos
__________________
Manoloweb
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 07:11.