2012-01-12 92 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

享受!