preg_match来验证URL slug

时间:2012-01-12 20:27:47

标签: php regex preg-match

我让用户在我的网站上创建自己的个人资料,以便他们可以选择他们的网址。例如,如果他们的名字是John Smith,他们可能想输入john-smith,然后他们的个人资料网址将是www.mysite.com/john-smith。

我需要使用preg_match来验证他们输入的是有效的URL slug。因此,以下是有效的规则:

它必须包含至少一个字母,并且只能包含字母,数字和连字符

有人可以帮我解决,但我擅长PHP而且还有正则表达式的垃圾!

3 个答案:

答案 0 :(得分: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("user+inv@lid")

但如果没有,函数test_username()将针对模式测试其参数:

  • 开始(^)...
  • 一个字母([a-z])...
  • 后跟任意数量的字母,数字或连字符([-a-z0-9]*)......
  • 之后没有任何内容($)。

答案 1 :(得分:3)

更好的解决方案:

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

试验:

  • 失败:-user-name
  • 失败:用户名 -
  • 失败:用户名 -
  • 有效:用户名
  • 有效:user123-name-321
  • 有效:用户名
  • 有效:USER123-name
  • 有效:user-name-2

享受!

答案 2 :(得分:1)

非常简单,如果我们假设第一个字符必须是一个字母......

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