如何解析比NumberFormat在Java中更严格的数字?

时间:2011-12-07 13:49:28

标签: java validation number-formatting

我正在验证表单中的用户输入。

我用NumberFormat解析输入,但这是邪恶的,几乎可以允许任何东西。有没有办法解析数字更严格?

E.g。我想不允许这三个输入,对于整数,但Numberformat允许所有这些:

NumberFormat nf = NumberFormat.getNumberInstance();
nf.setParseIntegerOnly(true);

Number numberA = nf.parse("99.731");    // 99 (not what the user expect)
Number numberB = nf.parse("99s.231");   // 99 (invalid)
Number numberC = nf.parse("9g9");       // 9  (invalid)

System.out.println(numberA.toString());
System.out.println(numberB.toString());
System.out.println(numberC.toString());

6 个答案:

答案 0 :(得分:7)

也许这会有所帮助:

String value = "number_to_be_parsed".trim();
NumberFormat formatter = NumberFormat.getNumberInstance();
ParsePosition pos = new ParsePosition(0);
Number parsed = formatter.parse(value, pos);
if (pos.getIndex() != value.length() || pos.getErrorIndex() != -1) {
    throw new RuntimeException("my error description");
}

(感谢Strict number parsing at mynetgear.net

答案 1 :(得分:3)

有很多方法可以做到这一点:

答案 2 :(得分:2)

Integer.parseInt(String)将在所有示例上抛出NumberFormatException。我不确定这是不是你要找的东西,但它确实更严格。"

答案 3 :(得分:0)

将DecimalFormat与格式模式字符串一起使用。

答案 4 :(得分:0)

查看DecimalFormat,它是NumberFormat http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html

的子类

DecimalFormat myFormatter = new DecimalFormat(“###。###”);

答案 5 :(得分:0)

我放弃编写自己的验证课程,并使用NEBULA WIDGETS FormattedText

它是通过SWT小部件API编写的,但您可以轻松调整NumberFormatter class