我正在尝试检查数值是否有特定的数字位数。
有效的例子:
无效的例子
我已经尝试了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());
}
答案 0 :(得分:5)
您可以使用\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
匹配字符串的结尾答案 1 :(得分:0)
试试这个:
Pattern p = Pattern.compile("(-)?(\\+)?(\\d+)\\.(\\d+)");
Matcher m = p.matcher("1234567890123456.1234");
if(m.find()){
if(m.group(3).length()<=17 && m.group(4).length()<=4 && (m.group(3).length()+m.group(4).length()<20)){
System.out.println("Correct");
}
}