使用正则表达式匹配Java中的一个小数位

时间:2011-05-29 16:35:31

标签: java regex

希望是一个快速的问题。我正在尝试验证双倍。确保它对小数点后一位是正的。

良好的价值观:0.1,2.5,100.1,1,54 错误值:-0.1,1.123,1.12,abc,00012.1

所以我在这里尝试了Regex:

 public boolean isValidAge(String doubleNumber)
{
    DoubleValidator doubleValidator = new DoubleValidator();
    return doubleValidator.isValid(doubleNumber,"*[0-9]\\\\.[0-9]");
}

我也尝试过:"*[0-9].[0-9]""\\\\d+(\\\\.\\\\d{1})?""[0-9]+(\\\\.[0-9]?)?"

似乎没有任何效果。我一直在使用org.apache.commons.validator.routines.DoubleValidator

我还有另一种方法可以解释为什么这些正则表达式不起作用?我不必使用正则表达式。

由于

3 个答案:

答案 0 :(得分:7)

这将匹配一个数字,只有一个数字与一个多位小数点前的小数点,没有前导零(s),或只是一个零,以及可选的小数点和一个十进制数字。包括字符串开头/结尾的匹配,因此它与较大字符串中的数字不匹配(更新为不接受前导零,信用@Nicklas A ):

^([1-9]\d*|0)(\.\d)?$

请改用java.util.regex.Pattern库。

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

因为您正在将正则表达式放入字符串中,所以请务必转义反斜杠

"^([1-9]\\d*|0)(\\.\\d)?$"

我建议你在这里阅读正则表达式,它们是一个重要的工具,可以说“在你的腰带下”。

http://www.regular-expressions.info/

答案 1 :(得分:3)

Pattern.compile ("[0-9]+\\.[0-9])").matcher (doubleNumber).matches ()

会做到这一点 如果你还想不允许小数点:

Pattern.compile ("[0-9]+(\\.[0-9])?").matcher (doubleNumber).matches ()

编辑:关于没有前导零和整数的评论是正确的:

Pattern.compile("([1-9][0-9]*|[0-9])(\\.[0-9])?").matcher(doubleNumber).matches()

答案 2 :(得分:-1)

如果你需要用点,逗号,正数和负数来验证小数:

Object testObject = "-1.5";
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+([\\.\\,]{1}[0-9]{1}){0,1}$", (CharSequence) testObject);
祝你好运。