2012-01-12 91 views
6

我讓用戶在我的網站上創建自己的配置文件,以便他們可以選擇他們的網址。例如,如果他們的名字是John Smith,他們可能想要輸入john-smith,然後他們的個人資料URL是www.mysite.com/john-smith。preg_match驗證一個URL slug

我需要使用preg_match來驗證它們輸入的是一個有效的URL段落。因此,這裏有它必須履行有效的規則:

它必須至少包含一個字母,它只能包含字母,數字和連字符

有人可以幫我請我擅長PHP,但垃圾與正則表達式!

回答

14

我希望這個代碼是不言自明:

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

但如果不是,則函數test_username()根據模式測試其參數:

  • 開始(^)...
  • 一個字母([a-z])...
  • 後跟任意數量的字母,數字或連字符([-a-z0-9]*)的...
  • 和不具有($)後,任何東西。
+1

這對'invalid - slug'失敗,# – Victor 2016-05-31 07:29:51

+0

@Victor,你可以試試:/^[a-z]( - [a-z0-9] +)* $ / – 2016-08-07 00:07:21

1

相當簡單,如果我們假設第一個字符必須是字母......

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

更好的解決方案:

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

測試:

  • 失敗: - 用戶名
  • 失敗:用戶 - 名
  • 失敗:用戶名 -
  • 有效:用戶名
  • 有效:user123名-321
  • 有效:用戶名
  • 有效:USER123名
  • 有效:用戶名-2

享受!