【发布时间】:2017-10-16 00:31:13
【问题描述】:
我想在我的项目中创建类似权限的东西。 如何检查字符串是否匹配数组中的正则表达式之一?
//Array of user (group) permissions.
$arrayOfPermissions = [
'admin.users.edit',
'admin.users.*',
'dashboard.view',
];
//Check is this permission presents in array
$stringToMatch = 'admin.users.view';
* 符号表示用户拥有该组的所有权限。
例如:
如果用户有权限admin.users.*,那么他应该通过admin.users.view的验证
统一更新: 我现在用这个,但是好像不太好。
private function checkPerms($permission)
{
$arrayOfPermissions = [
'admin.dashboard.view',
'admin.users.*'
];
foreach ($arrayOfPermissions as $perm)
{
if(preg_match("/".$perm."/", $permission))
{
return true;
}
}
return false;
}
//This should return `true`
checkPerms("admin.users.view");
附:我使用 Laravel。
【问题讨论】:
-
数组值不是正则表达式。
-
为什么不只是
admin.users? -
@splash58 因为如果用户有
admin.users.*这样的权限,他应该可以在需要admin.users.edit或admin.users.create等的地方做任何工作。 -
@u_mulder
*符号是正则表达式 -
这不是答案,但请注意,在正则表达式中,
.是一个特殊字符,*与通配符匹配、typeglob 等中的含义不同. 如果您希望正则表达式匹配文字.,请使用\.。如果您想要 typeglob 样式的*,请使用.+(或.*,如果您希望空字符串成为有效匹配项)。例如,使用'admin\\.users\\..+'代替'admin.users.*'。您用作正则表达式的字符串将匹配您要匹配的字符串,但也匹配其他字符串,例如admin-userstrike。
标签: php arrays regex string laravel