2012-01-12 30 views
6

Estoy dejando que el usuario cree su propio perfil en mi sitio para que puedan elegir cuál será su URL. Entonces, por ejemplo, si su nombre es John Smith, les gustaría ingresar a john-smith y luego su URL de perfil sería www.mysite.com/john-smith.preg_match para validar una variable URL

Necesito usar preg_match para validar que lo que ingresan es una barra URL válida. Así que aquí están las reglas que debe cumplir para ser válido:

debe contener al menos una letra y sólo puede contener letras, números y guiones

Puede alguien que me ayude por favor, soy bueno en PHP, pero basura con expresiones regulares!

Respuesta

14

espero que este código es autoexplicativo:

<?php 

function test_username($username){ 
    if(preg_match('/^[a-z][-a-z0-9]*$/', $username)){ 
     echo "$username matches!\n"; 
    } else { 
     echo "$username does not match!\n"; 
    } 
} 

test_username("user-n4me"); 
test_username("[email protected]") 

Pero si no es así, la función test_username() probar su argumento en contra del patrón:

  • comienza (^) ...
  • con una letra ([a-z]) ...
  • seguido de cualquier número de letras, números o guiones ([-a-z0-9]*) ...
  • y no tiene nada después de eso ($).
+1

Esto falla para 'invalid-slug' – Victor

+0

@Victor, puede intentar:/^ [a-z] (- [a-z0-9] +) * $ / –

1

Bastante simple, si suponemos que el primer carácter debe ser una letra ...

/[a-z]{1}[a-z0-9\-]*/i 
1

mejor solución:

function is_slug($str) { 
    return preg_match('/^[a-z0-9](-?[a-z0-9]+)$/i', $str); 
} 

Pruebas:

  • Falla: -user-nombre
  • Falla: usuario - Nombre
  • fallan: username-
  • válida : nombre-usuario
  • válida: user123-nombre-321
  • válido: nombre de usuario
  • válida: user123 nombre
  • válido: nombre de usuario-2

disfrutar!

Cuestiones relacionadas