2012-01-12 16 views
6

Pozwalam użytkownikowi utworzyć swój własny profil w mojej witrynie, aby mógł wybrać adres URL. Na przykład, jeśli nazywają się John Smith, mogą wpisać john-smith, a ich adres URL to: www.mysite.com/john-smith.preg_match do sprawdzania poprawności adresu URL

Potrzebuję użyć preg_match, aby potwierdzić, że to, co wpisano, jest poprawnym URL-em. Więc tutaj są zasady, które musi spełnić, aby być ważne:

musi zawierać co najmniej jedną literę i może zawierać tylko litery, cyfry i myślniki

Czy ktoś może mi pomóc proszę Jestem dobry w PHP, ale śmieci z regex!

Odpowiedz

14

Mam nadzieję, że ten kod jest oczywista:

<?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]") 

Ale jeśli nie, to funkcja test_username() przetestować swój argument przeciwko wzoru:

  • Początek (^ ...
  • 0)
  • z jednej litery ([a-z]) ...
  • następuje dowolna liczba liter, cyfr lub myślnikami ([-a-z0-9]*) ...
  • i nie ma nic po tym ($).
+1

Nie można tego zrobić z 'invalid - slug' – Victor

+0

@Victor, możesz spróbować:/^ [a-z] (- [a-z0-9] +) * $ / –

1

Całkiem po prostu, jeśli założymy, że pierwszy znak musi być literą ...

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

Lepsze rozwiązanie:

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

Testy:

  • fail: -user-name
  • fail: Użytkownik - nazwa
  • fail: username-
  • ważny : nazwa użytkownika
  • ważne: user123-name-321
  • ważny: nazwa_użytkownika
  • ważny: USER123-name
  • ważny: nazwa_użytkownika-2

Enjoy!

Powiązane problemy