首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果找到至少一个匹配项,则使用Regex匹配。

如果找到至少一个匹配项,则使用Regex匹配。
EN

Stack Overflow用户
提问于 2022-04-20 17:33:07
回答 1查看 68关注 0票数 -2

我正在为用户和他们的不同权限编写程序。一个用户可以拥有几个不同的权限,但问题是某些权限是相互排斥的,可能会导致问题,而其他权限则是不必要的。

每个用户都有如下字符串:

10010111

每个数字代表一个特定的权限。我有一个过滤器来确定个人的主要角色,如下所示:

1........1.......

然后,我有一个筛选器,用于确定是否存在任何排除权限错误:

..1....1

最后,对于不必要的权限错误有一个筛选器:

...1..1.

过滤器没有指定的任何内容都是可以接受的,不需要检查。

我的问题是:如果至少有一个1匹配,如何才能让regex筛选器返回某项内容,否则,如果没有匹配,则不返回任何内容。我试着把我的过滤器换成这样的东西:

..1?....1?

但是它在每一个输入上都是匹配的。

如果可能的话,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-20 18:04:31

因为它是二进制的,所以可以只使用按位运算符。

代码语言:javascript
运行
复制
// here is example in javascript

const userPermission     = 0b01100110;
const requiredPermission = 0b00100010;

if ((userPermission & requiredPermission) == requiredPermission) {
  console.log('this user have permission to do things');
}

这个按位运算符(&)被调用和。这个运算符将得到两个二进制文件中有一个值的相同值。

代码语言:javascript
运行
复制
0110110
0010010
------- &
0010010

0110100
0010010
------- &
0010000

如果它有我们想要的位,那么它应该返回与权限二进制相同的内容。然后我们只需要检查它是否等于许可。

但是,因为您要求使用regex代替。然后,我们只需检查这是否与/^regexhere$/完全匹配,并将任何其他匹配与[01]

代码语言:javascript
运行
复制
00100010 will becomes
/^[01]{2}1[01]{3}1[01]$/

但是,由于二进制文件可以有不同的位长,所以只需要从末尾使用/regexhere$/来匹配它。

代码语言:javascript
运行
复制
00100010 will becomes
/1[01]{3}1[01]$/
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71943898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档