我正在使用 spring Spel 表达式解析器来评估逻辑表达式,但当字符串包含任何特殊字符时它会失败
这是例子
private final ExpressionParser parser = new SpelExpressionParser();
public boolean evaluate(String expressionString) {
try {
var expression = parser.parseExpression(expressionString);
var result = expression.getValue(Boolean.class);
return result;
} catch (ParseException | SpelEvaluationException exception) {
throw exception;
}
输入字符串如下:
"'Ha'il'.equalsIgnoreCase('迪拜') || 'Ha'il'.equalsIgnoreCase('曼谷') || 'Ha'il'.equalsIgnoreCase('普吉岛') || 'Ha'il'. equalsIgnoreCase('Abha')" || 'Ha'il'.equalsIgnoreCase('Ha'il')
如何考虑特殊字符比较(如 $^'% 等)
我相信文档中对此进行了解释:https://docs.spring.io/spring-framework/reference/core/expressions/language-ref/literal.html
字符串可以用单引号 (') 或双引号 (") 分隔。要在单引号括起来的字符串文字中包含单引号,请使用两个相邻的单引号字符。类似地,要包含双引号用双引号括起来的字符串文字内的引号,请使用两个相邻的双引号字符。
所以,显然你的
'Ha'il'
必须是这样的'Ha''il'
。或者用双引号括起来:"Ha'il"
.