希望是一个快速的问题。我正在尝试验证双倍。确保它对小数点后一位是正的。
良好的价值观: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
我还有另一种方法可以解释为什么这些正则表达式不起作用?我不必使用正则表达式。
由于
答案 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)?$"
我建议你在这里阅读正则表达式,它们是一个重要的工具,可以说“在你的腰带下”。
答案 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);
祝你好运。