我允许用户在我的网站上创建自己的个人资料,这样他们就可以选择自己的url。例如,如果他们的名字是John Smith,他们可能想输入John Smith,那么他们的个人资料url将是www.mysite.com/John-Smith。
我需要使用preg_match来验证他们输入的是有效的URL段塞。因此,以下是它必须遵守的有效规则:
它必须至少包含一个字母,并且只能包含字母、数字和连字符
有人能帮我吗?我很擅长PHP,但正则表达式很垃圾!
我希望这段代码是不言自明的:
<?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]*
) - 并且在那之后什么都没有(
$
)
更好的解决方案:
function is_slug($str) {
return preg_match('/^[a-z0-9]+(-?[a-z0-9]+)*$/i', $str);
}
测试:
- 失败:-用户名
- 失败:user--name
- 失败:用户名-
- 有效:用户名
- 有效:user123-name-321
- 有效:用户名
- 有效:USER123名称
- 有效:用户名-2
享受吧!
很简单,如果我们假设第一个字符必须是字母。。。
/[a-z]{1}[a-z0-9'-]*/i