gpt4 book ai didi

java - 如何使用正则表达式限制小数点之前/之后/小数点以及整体的位数?

转载 作者:行者123 更新时间:2023-11-30 06:06:50 25 4
gpt4 key购买 nike

我正在尝试检查数值是否具有特定数量的数字。

  1. 总共不应超过 19 位数字
  2. 小数点前不得超过 17 位数字(整数部分)
  3. 小数点后(小数部分)不得超过 4 位
  4. 可以有小数点,也可以没有小数点
  5. 前面可以有+或-,也可以没有

有效示例:

  • 1
  • 1.0
  • .0
  • 12345678901234567.12
  • +12345678901234567.12
  • -12345678901234567.12
  • 123456789012345.1234
  • +123456789012345.1234
  • -123456789012345.1234

无效示例

  • 1234567890123456.1234//因为有20位
  • 123456789012345678.1//因为小数点前超过17位
  • 1.12345//因为小数点后多了4位

我已经尝试过 this tutorial 中的示例,但无法让它们按照我想要的方式工作。我认为我很难理解如何使用前瞻/前后查看,因为这部分并不能真正实现我想要的功能:

@Test
public void testTutorialCode() {
//min two, max four digits for the whole expression
Pattern p = Pattern.compile("\\A(?=(?:[^0-9]*[0-9]){2,4})\\z");
assertFalse(p.matcher("+1234.0").matches());
assertTrue(p.matcher("12").matches());
assertTrue(p.matcher("12.12").matches());
assertTrue(p.matcher("+123.0").matches());
assertFalse(p.matcher("1234.0").matches());
}

最佳答案

您可以使用 \A(?=.*\d)(?!(?:\D*\d){20,})[+-]?\d{0,17}(? :\.\d{1,4})?\z。在 java 代码中使用时请记住使用双反斜杠。

  • \A - 匹配字符串的开头
  • (?=.*\d) 检查是否至少有一位数字(因为基本上所有内容都是可选的)
  • (?!(?:\D*\d){20,}) 检查数字是否不超过 19 位
  • [+-]? 匹配可选的 +-
  • \d{0,17} 最多匹配 17 位整数部分
  • (?:\.\d{1,4})? 最多匹配小数部分 4 位数字,您可以使用 {0,4} 如果12.有效
  • \z 匹配字符串结尾

关于java - 如何使用正则表达式限制小数点之前/之后/小数点以及整体的位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43274614/

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