最低版本核心库 2.2.5
删除选项:"隐藏标签将用作回复标签"在 2.2.0
中添加 添加新选项以将隐藏标签与另一个
完全重新设计的隐藏标签相匹配。现在,如果用户为以 () 开头和结尾的标记指定选项。例如 [HIDE=(option)],现在将处理条件。如果用户未指定选项并且标签与其他标签不匹配,则它将像以前一样输出给注册用户。
标签 [隐藏] 用于隐藏内容。如果指定了 [HIDE=(条件)],则该条件将应用于隐藏内容。注: 在 = 符号之后,必须将条件括在括号中,以指示条件处理的开始和结束。在内部,您可以使用任何条件分组。
允许的表达式(标记):
- 帖子:用户帖子数。
- 喜欢:用户反应计数。
- 反应:用户反应计数(与赞相同)。
- 奖杯:用户奖杯的数量。
- 天数:自用户注册以来的天数。
- isMemberOf(id):用户组,对于多个组,您可以使用逗号分隔的值。
- 用户名:用户的用户名。
- user_id:用户的标识符。
- user_state:用户的状态。
- is_staff:指示用户是否为工作人员的标志。
- is_admin:指示用户是否为管理员的标志。
- is_moderator:指示用户是否为审阅人的标志。
允许的运算符:
- 算术运算符:算术运算符用于执行数学计算:
- 比较运算符:比较运算符用于比较值并返回布尔结果:
- ==(等于)
- === (严格等于)
- != (不等于)
- !== (严格不等于)
- <(小于)
- >(大于)
- <=(小于或等于)
- >=(大于或等于)
- 逻辑运算符:逻辑运算符用于执行逻辑操作并返回布尔结果:
- 和或&&(逻辑和)
- 或或 ||(逻辑或)
- 不是或!(逻辑上不是)
- 按位运算符:按位运算符对数字的二进制表示执行:
- 字符串运算符:
~ 运算符用于字符串连接:
- 数组运算符:数组运算符用于检查数组中的元素成员资格:
- in(数组中存在的元素)
- 不在(数组中不存在元素)
- 数字运算符:
..运算符用于创建数字范围:
- 三元运算符:
?: 运算符用于在单行中执行条件运算:
示例:
[隐藏]你好世界![/HIDE] - 只有注册用户才能看到隐藏的文本
[HIDE=(帖子> 1 或喜欢 > 1)]你好世界![/HIDE] - 如果用户帖子数大于 1 或赞数大于 1,将显示隐藏文本"Hello world!"。
[HIDE=(帖子> 1 并喜欢 > 1)]你好世界![/HIDE] - 如果用户帖子数大于 1 且赞数大于 1,将显示隐藏文本"Hello world!"。
[HIDE=(天> 1 或 user_state == "有效")]你好世界![/HIDE] - 如果用户注册后的天数大于 1 或用户状态为"有效",将显示隐藏文本"Hello World!"。
[HIDE=(isMemberOf(2) 或奖杯 >= 0)]你好世界![/HIDE] - 如果用户是组 2 的成员或用户奖杯数量大于或等于 0,将显示隐藏文本"Hello World!"。
[隐藏=(is_staff)]你好世界![/HIDE] - 如果用户是工作人员,将显示隐藏文本"Hello World!"。
安全性以及使用如此广泛的范围的安全性如何?是的,它是完全安全的,对于表达式解释,插件不使用 eval。
从安全角度来看,这很重要,因为使用 eval() 可能会带来风险,尤其是在输入数据未正确验证的情况下。eval() 函数允许执行任意代码,包括潜在的危险操作,并可用于注入恶意代码或执行不需要的操作。
那么如果不使用 eval() 它是如何工作的呢?
传递表达式时,首先将其解析为标识符、运算符、数字和字符串等标记。然后,使用语法和句法规则分析表达式。
分析器构造表示表达式结构的语法树 (AST)。
生成 AST 后,通过遍历 AST 并执行上下文中定义的相应操作和函数来解释表达式。
此方法基于使用上下文解析和解释表达式,提供了表达式的安全执行,因为它不需要使用 eval() 函数,并允许控制可用的操作和函数,从而最大限度地减少潜在的漏洞。