【fix sonar】SysCheckRuleServiceImpl文件
This commit is contained in:
+52
-44
@@ -9,6 +9,7 @@ import org.apache.commons.lang.StringUtils;
|
|||||||
import com.jero.modules.system.entity.SysCheckRule;
|
import com.jero.modules.system.entity.SysCheckRule;
|
||||||
import com.jero.modules.system.mapper.SysCheckRuleMapper;
|
import com.jero.modules.system.mapper.SysCheckRuleMapper;
|
||||||
import com.jero.modules.system.service.ISysCheckRuleService;
|
import com.jero.modules.system.service.ISysCheckRuleService;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@@ -46,53 +47,60 @@ public class SysCheckRuleServiceImpl extends ServiceImpl<SysCheckRuleMapper, Sys
|
|||||||
if (checkRule != null && StringUtils.isNotBlank(value)) {
|
if (checkRule != null && StringUtils.isNotBlank(value)) {
|
||||||
String ruleJson = checkRule.getRuleJson();
|
String ruleJson = checkRule.getRuleJson();
|
||||||
if (StringUtils.isNotBlank(ruleJson)) {
|
if (StringUtils.isNotBlank(ruleJson)) {
|
||||||
// 开始截取的下标,根据规则的顺序递增,但是 * 号不计入递增范围
|
JSONObject result = getJsonObject(value, ruleJson);
|
||||||
int beginIndex = 0;
|
if (result != null) return result;
|
||||||
JSONArray rules = JSON.parseArray(ruleJson);
|
|
||||||
for (int i = 0; i < rules.size(); i++) {
|
|
||||||
JSONObject result = new JSONObject();
|
|
||||||
JSONObject rule = rules.getJSONObject(i);
|
|
||||||
// 位数
|
|
||||||
String digits = rule.getString("digits");
|
|
||||||
result.put("digits", digits);
|
|
||||||
// 验证规则
|
|
||||||
String pattern = rule.getString("pattern");
|
|
||||||
result.put("pattern", pattern);
|
|
||||||
// 未通过时的提示文本
|
|
||||||
String message = rule.getString("message");
|
|
||||||
result.put("message", message);
|
|
||||||
|
|
||||||
// 根据用户设定的区间,截取字符串进行验证
|
|
||||||
String checkValue;
|
|
||||||
// 是否检查整个值而不截取
|
|
||||||
if (CHECK_ALL_SYMBOL.equals(digits)) {
|
|
||||||
checkValue = value;
|
|
||||||
} else {
|
|
||||||
int num = Integer.parseInt(digits);
|
|
||||||
int endIndex = beginIndex + num;
|
|
||||||
// 如果结束下标大于给定的值的长度,则取到最后一位
|
|
||||||
endIndex = endIndex > value.length() ? value.length() : endIndex;
|
|
||||||
// 如果开始下标大于结束下标,则说明用户还尚未输入到该位置,直接赋空值
|
|
||||||
if (beginIndex > endIndex) {
|
|
||||||
checkValue = "";
|
|
||||||
} else {
|
|
||||||
checkValue = value.substring(beginIndex, endIndex);
|
|
||||||
}
|
|
||||||
result.put("beginIndex", beginIndex);
|
|
||||||
result.put("endIndex", endIndex);
|
|
||||||
beginIndex += num;
|
|
||||||
}
|
|
||||||
result.put("checkValue", checkValue);
|
|
||||||
boolean passed = Pattern.matches(pattern, checkValue);
|
|
||||||
result.put("passed", passed);
|
|
||||||
// 如果没有通过校验就返回错误信息
|
|
||||||
if (!passed) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new JSONObject();
|
return new JSONObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private JSONObject getJsonObject(String value, String ruleJson) {
|
||||||
|
// 开始截取的下标,根据规则的顺序递增,但是 * 号不计入递增范围
|
||||||
|
int beginIndex = 0;
|
||||||
|
JSONArray rules = JSON.parseArray(ruleJson);
|
||||||
|
for (int i = 0; i < rules.size(); i++) {
|
||||||
|
JSONObject result = new JSONObject();
|
||||||
|
JSONObject rule = rules.getJSONObject(i);
|
||||||
|
// 位数
|
||||||
|
String digits = rule.getString("digits");
|
||||||
|
result.put("digits", digits);
|
||||||
|
// 验证规则
|
||||||
|
String pattern = rule.getString("pattern");
|
||||||
|
result.put("pattern", pattern);
|
||||||
|
// 未通过时的提示文本
|
||||||
|
String message = rule.getString("message");
|
||||||
|
result.put("message", message);
|
||||||
|
|
||||||
|
// 根据用户设定的区间,截取字符串进行验证
|
||||||
|
String checkValue;
|
||||||
|
// 是否检查整个值而不截取
|
||||||
|
if (CHECK_ALL_SYMBOL.equals(digits)) {
|
||||||
|
checkValue = value;
|
||||||
|
} else {
|
||||||
|
int num = Integer.parseInt(digits);
|
||||||
|
int endIndex = beginIndex + num;
|
||||||
|
// 如果结束下标大于给定的值的长度,则取到最后一位
|
||||||
|
endIndex = endIndex > value.length() ? value.length() : endIndex;
|
||||||
|
// 如果开始下标大于结束下标,则说明用户还尚未输入到该位置,直接赋空值
|
||||||
|
if (beginIndex > endIndex) {
|
||||||
|
checkValue = "";
|
||||||
|
} else {
|
||||||
|
checkValue = value.substring(beginIndex, endIndex);
|
||||||
|
}
|
||||||
|
result.put("beginIndex", beginIndex);
|
||||||
|
result.put("endIndex", endIndex);
|
||||||
|
beginIndex += num;
|
||||||
|
}
|
||||||
|
result.put("checkValue", checkValue);
|
||||||
|
boolean passed = Pattern.matches(pattern, checkValue);
|
||||||
|
result.put("passed", passed);
|
||||||
|
// 如果没有通过校验就返回错误信息
|
||||||
|
if (!passed) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user