java - 正则表达式仅包含数字且不包含仅 0

我想实现一个在以下情况下返回 true 的正则表达式:

  • 字符串只包含数字
  • 字符串不只包含0(比如0000)

例如:

  • 1230456 => 正确
  • 888822200000 => 正确
  • 00000000 => 假
  • fff => 假

我开始实现这个

private static final String ARTICLE_VALID_FORMAT = "\\d";
private static final Pattern ARTICLE_VALID_FORMAT_PATTERN = Pattern.compile(ARTICLE_VALID_FORMAT);

private boolean isArticleHasValidFormat(String article) {
    return StringUtils.isNotBlank(article) && ARTICLE_VALID_FORMAT_PATTERN.matcher(article).matches();
}

现在,如果文章只有数字,它会返回 true。但我也想测试它是否不全是 0。

怎么做?

谢谢

最佳答案

您可以使用:

private static final String ARTICLE_VALID_FORMAT = "[0-9]*?[1-9][0-9]*";

这意味着:

  • 匹配零个或多个数字; ? 意味着在进入下一部分之前匹配尽可能少
  • 然后一位不是零的数字
  • 然后是零个或多个数字

或者,正如 Joachim Sauer 在评论中建议的那样:

private static final String ARTICLE_VALID_FORMAT = "0*[1-9][0-9]*";

这意味着:

  • 匹配零个或多个零
  • 然后一位不是零的数字
  • 然后是零个或多个数字

如果你想在没有正则表达式的情况下做到这一点,你可以使用(以及许多其他方式):

    string.chars().allMatch(c -> c >= '0' && c <= '9')
 && string.chars().anyMatch(c -> c != '0')

https://stackoverflow.com/questions/67420752/

相关文章:

python - 如何处理来自 binance websocket 的多流数据?

mongodb - 使用 GridFS 在 MongoDB 中存储图像是否有效?

reactjs - 创建一个可以通过函数调用显示的 React 组件(如 react-toastif

javascript - 这些 ES6 import 语句之间有什么区别?

java - 就线程或不同请求而言,Spring 的 SecurityContext 行为是什么?

javascript - 获取具有类的下一个元素(不是子元素或兄弟元素)

javascript - 使用 ts-node 的 Typescript 声明合并无法按预期工作

r - 使用数值条件对一系列列进行编码

regex - 如何将 RegEx token 传递给 RegEx 替换中的 PowerShell

python - 有没有办法缩短多个 if 语句?