我正在为用户和他们的不同权限编写程序。一个用户可以拥有几个不同的权限,但问题是某些权限是相互排斥的,可能会导致问题,而其他权限则是不必要的。
每个用户都有如下字符串:
10010111
每个数字代表一个特定的权限。我有一个过滤器来确定个人的主要角色,如下所示:
1.......或.1.......
然后,我有一个筛选器,用于确定是否存在任何排除权限错误:
..1....1
最后,对于不必要的权限错误有一个筛选器:
...1..1.
过滤器没有指定的任何内容都是可以接受的,不需要检查。
我的问题是:如果至少有一个1匹配,如何才能让regex筛选器返回某项内容,否则,如果没有匹配,则不返回任何内容。我试着把我的过滤器换成这样的东西:
..1?....1?
但是它在每一个输入上都是匹配的。
如果可能的话,有什么想法吗?
发布于 2022-04-20 18:04:31
因为它是二进制的,所以可以只使用按位运算符。
// here is example in javascript
const userPermission = 0b01100110;
const requiredPermission = 0b00100010;
if ((userPermission & requiredPermission) == requiredPermission) {
console.log('this user have permission to do things');
}这个按位运算符(&)被调用和。这个运算符将得到两个二进制文件中有一个值的相同值。
0110110
0010010
------- &
0010010
0110100
0010010
------- &
0010000如果它有我们想要的位,那么它应该返回与权限二进制相同的内容。然后我们只需要检查它是否等于许可。
但是,因为您要求使用regex代替。然后,我们只需检查这是否与/^regexhere$/完全匹配,并将任何其他匹配与[01]。
00100010 will becomes
/^[01]{2}1[01]{3}1[01]$/但是,由于二进制文件可以有不同的位长,所以只需要从末尾使用/regexhere$/来匹配它。
00100010 will becomes
/1[01]{3}1[01]$/https://stackoverflow.com/questions/71943898
复制相似问题