preg_match来验证URL slug

geo*_*310 6 php regex preg-match

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

我需要使用preg_match来验证他们输入的是有效的URL slug.所以这里必须满足的规则是有效的:

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

有人可以帮助我,请我擅长PHP但是垃圾与正则表达式!

Eli*_*les 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")
Run Code Online (Sandbox Code Playgroud)

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

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


Art*_*újo 6

更好的解决方案:

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

测试:

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

享受!