匹配数字,无限小数位数

时间:2016-09-13 10:45:53

标签: java regex

我想检查用户输入是否是有效的双号(X.XXXXX)。

这是我的代码:

if(textField.getText().matches("^[0-9][.]+[0-9]$"))
{
    System.out.println("This is a double");
}

如果用户输入5.5,则println会被执行。如果用户输入5.55或点(5.5XXX...)后面包含更多数字的数字则不匹配。

如何定义匹配点后所有数字的正则表达式,无论多少?

3 个答案:

答案 0 :(得分:2)

您的加号+放错地方了:

^[0-9][.]+[0-9]$

让用户输入

5......1

你需要把它移到最后:

[0-9][.][0-9]+

不需要使用锚标记,因为您使用的是matches()

请注意,此正则表达式过于简单,因为它不支持负数,强制用户输入整数的.0,并且不允许科学记数法等。支持这些功能的正则表达式要复杂得多(请参阅this Q&A示例)。最好使用内置的解析方法来检查输入是否有效。

答案 1 :(得分:0)

这是你的正则表达式:

[+-]([0-9]*[.])?[0-9]+

这将接受

  • 123
  • 456.789
  • 0.555 等等..

答案 2 :(得分:0)

其他人已经提到了正则表达式解决方案(Danyal' s似乎是迄今为止最全面的)。 "真实"双关的正则表达式非常复杂!在这里看到这个问题:

Related question on SO

但我认为你问的是错误的问题(但是仍然没有提到科学记法):

你想要实现的是回答"这个字符串是双重的吗?"。现在有些东西更具可读性和整体性更好"而不是正则表达式。

例如,正如评论中所提到的,您实际上可以尝试解析字符串并查看它是否无法解析。这也是我链接的问题中的推荐方法,也是您应该遵循的方法。