我想检查用户输入是否是有效的双号(X.XXXXX)。
这是我的代码:
if(textField.getText().matches("^[0-9][.]+[0-9]$"))
{
System.out.println("This is a double");
}
如果用户输入5.5
,则println
会被执行。如果用户输入5.55
或点(5.5XXX...
)后面包含更多数字的数字则不匹配。
如何定义匹配点后所有数字的正则表达式,无论多少?
答案 0 :(得分:2)
您的加号+
放错地方了:
^[0-9][.]+[0-9]$
让用户输入
5......1
你需要把它移到最后:
[0-9][.][0-9]+
不需要使用锚标记,因为您使用的是matches()
。
请注意,此正则表达式过于简单,因为它不支持负数,强制用户输入整数的.0
,并且不允许科学记数法等。支持这些功能的正则表达式要复杂得多(请参阅this Q&A示例)。最好使用内置的解析方法来检查输入是否有效。
答案 1 :(得分:0)
这是你的正则表达式:
[+-]([0-9]*[.])?[0-9]+
这将接受
答案 2 :(得分:0)
其他人已经提到了正则表达式解决方案(Danyal' s似乎是迄今为止最全面的)。 "真实"双关的正则表达式非常复杂!在这里看到这个问题:
但我认为你问的是错误的问题(但是仍然没有提到科学记法):
你想要实现的是回答"这个字符串是双重的吗?"。现在有些东西更具可读性和整体性更好"而不是正则表达式。
例如,正如评论中所提到的,您实际上可以尝试解析字符串并查看它是否无法解析。这也是我链接的问题中的推荐方法,也是您应该遵循的方法。