Foros del Web » Programación web » PHP »

[SOLUCIONADO] solo permitir nombre usuario alfanuméricos

Estas en el tema de solo permitir nombre usuario alfanuméricos en el foro de PHP en Foros del Web. Necesito agregar a un formulario un filtro para el nombre de usuario. Solo quiero permitir letras y números y espacios. Ahora tengo esto... Código PHP: ...
  #1 (permalink)  
Antiguo 20/01/2014, 10:05
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
solo permitir nombre usuario alfanuméricos

Necesito agregar a un formulario un filtro para el nombre de usuario. Solo quiero permitir letras y números y espacios. Ahora tengo esto...

Código PHP:
$username preg_replace('([^A-Za-z0-9])'''$username); 
pero de esta forma no me permite los espacios. ¿cual es la mejor manera de hacerlo para que solo permita letras, números y espacios? solo php por favor
  #2 (permalink)  
Antiguo 20/01/2014, 10:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 21.434
Antigüedad: 6 años
Puntos: 2015
Respuesta: solo permitir nombre usuario alfanuméricos

Lo que estás manejando ahí es una expresión regular, es un sub-lenguaje totalmente diferente de PHP, por lo tanto tiene sus propias reglas y sintaxis.

Para agregar al espacio puedes colocarlo dentro del grupo [] como literal, o bien, como secuencia especial \s.

Por favor consulta una referencia de expresiones regulares.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 20/01/2014, 10:31
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Podrías darme algún ejemplo de como aceptar también los espacios en esa expresión regular? o hay alguna función php que haga eso?
  #4 (permalink)  
Antiguo 20/01/2014, 10:38
Avatar de Alexis88
Colaborador
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 1.156
Antigüedad: 2 años, 5 meses
Puntos: 202
Respuesta: solo permitir nombre usuario alfanuméricos

Exactamente como te lo dice pateketrueke, añadiendo al grupo un \s, que representa un espacio en blanco. También puede añadir un espacio en blanco literalmente.

Saludos
__________________
"Haz por los demás lo que quisieras que los demás hagan por ti. Nunca hagas a los demás lo que no quieres que los demás te hagan".
  #5 (permalink)  
Antiguo 20/01/2014, 10:42
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Ok antes de nada gracias a los dos por contestarme ;) Acabo de solucionarlo!! aunque lo he hecho de otra forma y no se si es una chapuza jejeje aunque funciona perfecto.

He hecho esto ahora...
Código PHP:
$username preg_replace('([^A-Za-z0-9[:space:]])'''$username); 
lo he hecho así mirando documentación de expresiones regulares.

Con la \s no se como debo hacerlo o el espacio en blanco. Soy muy torpe, lo se :)
  #6 (permalink)  
Antiguo 20/01/2014, 10:44
Avatar de PHPeros  
Fecha de Ingreso: septiembre-2013
Ubicación: /home/
Mensajes: 1.952
Antigüedad: 7 meses
Puntos: 241
Respuesta: solo permitir nombre usuario alfanuméricos

Madre mía

[^A-Za-z0-9\s]

Aunque el ^ no sé que pega, es justo lo contrario que pides...
  #7 (permalink)  
Antiguo 20/01/2014, 10:50
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 21.434
Antigüedad: 6 años
Puntos: 2015
Respuesta: solo permitir nombre usuario alfanuméricos

Cita:
Iniciado por PHPeros Ver Mensaje
Madre mía

[^A-Za-z0-9\s]

Aunque el ^ no sé que pega, es justo lo contrario que pides...
Es que dado el uso de preg_replace() significaría "elimina todo lo que no sea tal cosa" de la cadena, no más.

No es tal cual una "validación" sino mas bien un "filtro".
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 20/01/2014, 10:52
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 935
Antigüedad: 6 años, 1 mes
Puntos: 96
Respuesta: solo permitir nombre usuario alfanuméricos

Para validar cadena alfanumerica es mejor ctype_albnum()
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #9 (permalink)  
Antiguo 20/01/2014, 10:57
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Bueno como dice PHPeros funciona perfecto. Disculpar mi ignorancia pero... ¿sabéis de algún tutorial sobre expresiones regulares?

Mi pregunta ahora sería si esta es la forma más segura o la mejor de evitar nombres de usuario "raros". No se si podría hacerlo de una forma más segura.

Esto es todo lo que tengo puesto...
Código PHP:
$username "ε[-ิิ_•ิ] Daniel García";
$username strip_tags($username);
$username preg_replace('([^A-Za-z0-9\s])'''$username);
$username trim($username);
$url strtolower($username);
$url str_replace(array(' ','_'),"-",$url); 
La url sería para el perfil del usuario, tipo... www.web.com/daniel-garcia

Eso si, me acabo de dar cuenta que me elimina también las tildes.
  #10 (permalink)  
Antiguo 20/01/2014, 11:00
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Gracias xSkArx, ya estoy mirando el manual de esa función. Por lo que veo esto si sería validación verdad? Haré pruebas ;)
  #11 (permalink)  
Antiguo 20/01/2014, 11:46
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Bueno ahora ya he conseguido que permita nombres de solo letras, números, espacios y tildes. Y generar la url eliminando las tildes.

Código PHP:
$username "ε[-ิิ_•ิ] Daniel García";
$username strip_tags($username);
$username preg_replace('([^A-Za-zÁÉÍÓÚáéíóú0-9\s])'''$username);
$username trim($username);

$url1= array ("á","é","í","ó","ú","Á","É","Í","Ó","Ú"," ","_");
$url2= array ("a","e","i","o","u","A","E","I","O","U","-","-");
$url str_replace($url1,$url2,$username);
$url strtolower($url);

echo 
"<b>Aquí el nombre de usuario:</b> |".$username."|";
echo 
"<br><b>Aquí la url de usuario:</b> |".$url."|"
El resultado:
Aquí el nombre de usuario: |Daniel García|
Aquí la url de usuario: |daniel-garcia|

Pero como esto es con expresiones regulares ahora voy a probar la función que me decía xSkArx.
  #12 (permalink)  
Antiguo 20/01/2014, 12:39
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Ahora estoy probando la función ctype_alnum. Pero no permite espacios ni tildes. Alguna solución?

Código PHP:
<form action="" method="post">
 <input type="text" name="username2" value="" maxlength="20" />
 <input type="submit" value="Enviar" />
</form>
    
<?
$username 
= @$_POST['username2'];
if (
$username!="") {
    if (
ctype_alnum($username)) {
        echo 
"El nombre de usuario <b>$username</b> es correcto.\n";
    }
    else {
        echo 
"El nombre de usuario <b>$username</b> es incorrecto. Solo puede tener letras, números y/o espacios.\n";
    }
}
  #13 (permalink)  
Antiguo 20/01/2014, 13:01
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 21.434
Antigüedad: 6 años
Puntos: 2015
Respuesta: solo permitir nombre usuario alfanuméricos

Cita:
Iniciado por carabook Ver Mensaje
Ahora estoy probando la función ctype_alnum. Pero no permite espacios ni tildes. Alguna solución?
Me imagino que usando algo de lógica, ¿no te parece?

Código PHP:
Ver original
  1. if (verifica_alfanumerico() && verifica_espacios_y_tildes())

Vamos, que una sola función no va a hacer todo el trabajo, tu tienes que implementar dicha lógica de un modo u otro.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 20/01/2014, 13:14
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Ok probaré, gracias por contestar ;) Aunque así de primeras pensando.... con ese if seguiría teniendo que cumplirse la condición de la función ctype_alnum ¿no? Si le digo que se cumpla una condición y la otra, y una de ellas le digo que acepte tildes y espacios pero la otra no los permite, ¿no habría una contradicción?

Si pongo "Daniel García"...
Código PHP:
if (verifica_alfanumerico() && verifica_espacios_y_tildes()) 
Por mucho que una de las funciones si permita espacios y tildes, la función ctype_alnum seguiría sin cumplirse ¿no?
  #15 (permalink)  
Antiguo 20/01/2014, 13:45
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 935
Antigüedad: 6 años, 1 mes
Puntos: 96
Respuesta: solo permitir nombre usuario alfanuméricos

Mira estohttp://www.php.net/manual/es/function.ctype-alnum.php#92393
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #16 (permalink)  
Antiguo 20/01/2014, 13:51
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Cita:
Iniciado por xSkArx Ver Mensaje
Mira estohttp://www.php.net/manual/es/function.ctype-alnum.php#92393
Gracias xSkArx ;) haré pruebas a ver si lo consigo.
  #17 (permalink)  
Antiguo 13/02/2014, 06:00
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Ya conseguí hacerlo como quería con la función ctype_alnum...

Código PHP:
$aValid = array('-''—''_'' ''.'','':'';''<''>''»''|''"''·''%''&''/''('')''=''¿''?''¡''!''€''['']''+''-''ñ''Ñ''ç''á''Á''é''É''í''Í''ó''Ó''ú''Ú''à''À''è''È''ì''Ì''ò''Ò''ù''Ù');
                if(!
ctype_alnum(str_replace($aValid''$titulo))) {
                    
$mensaje '<div id="Error">Elimina caracteres extra&ntilde;os como... \ , * , # , @</div>';
                }
                else {
                    
$mensaje '<div id="Success">El t&iacute;tulo es correcto</div>';
                } 
Para quien quiera usarlo, este código sirve para comprobar que la variable "titulo" contenga caracteres alfanuméricos, permitiendo los de $aValid. Va perfecto! :)
  #18 (permalink)  
Antiguo 13/02/2014, 06:11
 
Fecha de Ingreso: noviembre-2009
Mensajes: 515
Antigüedad: 4 años, 5 meses
Puntos: 24
Respuesta: solo permitir nombre usuario alfanuméricos

primero elimina los espacios en blanco
Código PHP:
Ver original
  1. trim(ctype_alnum($string);
__________________
cada vez que aprendes algo te crees que no sabes nada
  #19 (permalink)  
Antiguo 13/02/2014, 06:16
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Cita:
Iniciado por arros Ver Mensaje
primero elimina los espacios en blanco
Código PHP:
Ver original
  1. trim(ctype_alnum($string);
Si arros, este código lo tengo dentro de una función y la función trim es lo primero que tengo puesto ;)
  #20 (permalink)  
Antiguo 13/02/2014, 16:52
 
Fecha de Ingreso: enero-2014
Ubicación: El mundo
Mensajes: 13
Antigüedad: 3 meses
Puntos: 0
Respuesta: solo permitir nombre usuario alfanuméricos

Ahora resulta que al meter ese código en una función, que está en otra página php, deja de funcionar. He probado el mismo código y funciona perfecto sin función.

Alguna sugerencia? puede ser algo de codificación de la página donde está la función o de donde la llama?



La zona horaria es GMT -6. Ahora son las 03:15.
SEO by vBSEO 3.3.2