当前位置:网站首页>关于不等式取值转义的思路
关于不等式取值转义的思路
2022-06-26 18:39:00 【51CTO】
最近遇到一个需求,前端填写不等式,后端需要需要进行存储,并在使用时需要将不等式转义成区间的形式,下面分享下大体的解决思路,仅供参考。
一、和前端约定传递的数据格式
前端的页面展示是这样的

和前端约定的传参格式为
利用 @ 符号对符号和版本号进行分隔,在后续入库时也可以根据这个符号进行切割,有多条规则可以传字符串数组,也可以传用逗号分隔的字符串
二、入库前校验
//多条规则版本号最大值最小值校验
versionRangeList :
=
strings
.
Split(
body
.
VersionRange,
",")
switch
len(
versionRangeList) {
case
1:
version :
=
strings
.
Split(
versionRangeList[
0],
"@")
switch
version[
0] {
case
GT,
GE,
LT,
LE,
EQ,
NE:
//正常规则
default:
return
tracerr
.
NewError(
"规则不合法,传参异常:"
+
versionRangeList[
0])
}
case
2:
version1 :
=
strings
.
Split(
versionRangeList[
0],
"@")
version2 :
=
strings
.
Split(
versionRangeList[
1],
"@")
switch
version1[
0] {
case
GT,
GE:
if
version1[
1]
>=
version2[
1]
|| (
version2[
0]
!=
LT
&&
version2[
0]
!=
LE) {
return
tracerr
.
NewError(
"规则不合法,版本号最小值没有小于最大值")
}
case
LT,
LE:
if
version1[
1]
<=
version2[
1]
|| (
version2[
0]
!=
GT
&&
version2[
0]
!=
GE) {
return
tracerr
.
NewError(
"规则不合法,版本号最小值没有小于最大值")
}
default:
return
tracerr
.
NewError(
"规则不合法,多条规则只能选择:gt,ge,lt,le")
}
default:
return
tracerr
.
NewError(
"规则不合法,规则数量异常,规则数量为:"
+
strconv
.
Itoa(
len(
versionRangeList)))
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
三、转义成区间
因为在使用时需要将不等式转换为区间的形式传给其他模块,因此我选择创建一个map,建立不等式与区间格式的对应关系
//不等式常量
const (
GT
=
"gt"
//大于
GE
=
"ge"
//大于等于
LT
=
"lt"
//小于
LE
=
"le"
//小于等于
EQ
=
"eq"
//等于
NE
=
"ne"
//不等于
)
func
RuleReversal(
versionRange []
string) (
reversalResult
string) {
//反转规则Map
ruleReversalMap :
=
map[
string]
string{
GT:
"(,Ver]",
GE:
"(,Ver)",
LT:
"[Ver,)",
LE:
"(Ver,)",
EQ:
"(,Ver),(Ver,)",
NE:
"[Ver]",
}
switch
len(
versionRange) {
case
1:
version :
=
strings
.
Split(
versionRange[
0],
"@")
reversalResult
=
strings
.
ReplaceAll(
ruleReversalMap[
version[
0]],
"Ver",
version[
1])
case
2:
version1 :
=
strings
.
Split(
versionRange[
0],
"@")
version2 :
=
strings
.
Split(
versionRange[
1],
"@")
switch
version1[
0] {
case
GT,
GE:
reversalResult
=
strings
.
ReplaceAll(
ruleReversalMap[
version1[
0]],
"Ver",
version1[
1])
+
","
+
strings
.
ReplaceAll(
ruleReversalMap[
version2[
0]],
"Ver",
version2[
1])
case
LT,
LE:
reversalResult
=
strings
.
ReplaceAll(
ruleReversalMap[
version1[
0]],
"Ver",
version1[
1])
+
","
+
strings
.
ReplaceAll(
ruleReversalMap[
version2[
0]],
"Ver",
version2[
1])
default:
tracerr
.
Print(
errors
.
New(
"规则不合法,版本不等式异常:"
+
version1[
0]))
return
""
}
default:
tracerr
.
Print(
errors
.
New(
"规则不合法,规则数量异常,规则数量为:"
+
strconv
.
Itoa(
len(
versionRange))))
return
""
}
return
reversalResult
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
利用 @ 符号对符号和版本号进行分隔,将分隔后的不等式符号去map中获取对应的区间格式,再将分隔后的版本号对获取到的区间格式中的Ver进行替换即可。
边栏推荐
- 最小生成树、最短路径、拓扑排序、关键路径
- Pinda general permission system (day 1~day 2)
- 手机影像内卷几时休?
- (multi threading knowledge points that must be mastered) understand threads, create threads, common methods and properties of using threads, and the meaning of thread state and state transition
- Eigen库计算两个向量夹角
- The eigen library calculates the angle between two vectors
- ISO documents
- CD-CompactDisk
- 链游开发成品源码 链游系统开发详情说明
- 9. Intelligent transportation project (2)
猜你喜欢

Tree array

Leetcode 128 longest continuous sequence

Pinda general permission system (day 1~day 2)

Interview key points that must be mastered index and affairs (with B-tree and b+ tree)

Numpy之matplotlib

微信小程序 uniapp 左滑 删除 带删除icon

微服务版单点登陆系统(SSO)

JVM入個門(1)

Convex hull problem

Micro service single sign on system (SSO)
随机推荐
Conditional compilation in precompiling instructions
微服务架构
Usage and difference between ros:: spinonce() and ros:: spin()
微服务版单点登陆系统(SSO)
Tree array
PC end records 515 ground sweeping robot /scan data
Summary of alter operation in SQL
JVM entry door (1)
Redis单点登陆系统+投票系统
Clion compiling catkin_ WS (short for ROS workspace package) loads cmakelists Txt problems
vuex中利用缓存解决刷新state数据丢失问题
Microservice architecture
(multi threading knowledge points that must be mastered) understand threads, create threads, common methods and properties of using threads, and the meaning of thread state and state transition
9. Intelligent transportation project (2)
Solidity - 合约继承子合约包含构造函数时报错 及 一个合约调用另一合约view函数收取gas费用
预编译处理指令中的条件编译
Installation and use of filebeat
链游开发成品源码 链游系统开发详情说明
8VC Venture Cup 2017 - Final Round C. Nikita and stack
带你解决哈希冲突,并实现一个简单hash表,