gpt4 book ai didi

java - 我们应该如何验证正则表达式语法

转载 作者:行者123 更新时间:2023-12-01 19:36:39 26 4
gpt4 key购买 nike

我们的用户可以向我们的应用程序提供一些正则表达式,我们应该对其进行一些匹配。因此,我们希望在用户输入时验证输入。

我们可以使用以下代码来做到这一点:

    try {
new String().matches(regEx);
} catch (PatternSyntaxException e) {
errors.addError(TASK_DETAILS.value(), "Invalid regular expression. " + e.getMessage());
}

但是,我们用来检查代码覆盖率的 SonarQube 将对 matches up 的调用标记为错误,并声称:“不应该忽略没有副作用的函数的返回值”。我可以通过将对匹配的调用放在名为“parse”或“format”的方法中来消除该错误,但我确实在验证,所以我希望我的方法启动“validate”。

是否有更好的方法来检查语法是否有效?

最佳答案

您可以调用 Pattern.compile 。但这会返回 Pattern哪个 SQ 可能希望你不要忽视。

将代码包装到返回 boolean 的方法中.

private boolean regexIsValid(String regex) {
try {
return Pattern.compile(regex) != null;
} catch (PatternSyntaxException e) {
return false;
}
}

然后调用这个方法。

if (regexIsValid(regex)) {
errors.addError(TASK_DETAILS.value(), "Invalid regular expression. ");
}

如果您需要PatternSyntaxException的详细信息,返回Optional<String>来自regexIsValid并检查它。

private Optional<String> regexIsValid(String regex) {
try {
Pattern pattern = Pattern.compile(regex);
return Optional.empty();
} catch (PatternSyntaxException e) {
return Optional.of(e.getMessge());
}
}
Optional<String> regexErrorMessage = regexIsValid(regex);
if (regexErrorMessage.isPresent()) {
errors.addError(TASK_DETAILS.value(), "Invalid regular expression. " + regexErrorMessage.get());
}

关于java - 我们应该如何验证正则表达式语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57199923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com