Java 匹配无小数位数限制的数字

Java 匹配无小数位数限制的数字,java,regex,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…)将不匹配 我如何定义一个正则表达式来匹配点后的所有数字,无论有多少个?您的加号+放错了位置: ^[0-9][.]+[0-9

我想检查用户输入是否是有效的双倍数字(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-9][.]+[0-9]$
允许用户输入

5......1
您需要将其移动到末尾:

[0-9][.][0-9]+
锚定标记不是必需的,因为您使用的是
matches()


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

您的加号
+
放错了位置:

^[0-9][.]+[0-9]$
允许用户输入

5......1
您需要将其移动到末尾:

[0-9][.][0-9]+
锚定标记不是必需的,因为您使用的是
matches()

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

这是您的正则表达式:

[+-]([0-9]*[.])?[0-9]+
这是可以接受的

  • 123
  • 456.789
  • .555 等等
    • 这是您的正则表达式:

      [+-]([0-9]*[.])?[0-9]+
      
      这是可以接受的

      • 123
      • 456.789
      • .555 等等

      其他人已经提到了regex解决方案(到目前为止,Danyal的似乎是最全面的)。双人间的“真正”正则表达式相当复杂!请看这里的问题:

      但我认为你问的问题是错误的(尽管没有一个问题仍然涉及科学符号):

      您想要实现的是回答“这个字符串是双精度的吗?”。在这方面,有些东西比正则表达式可读性强得多,而且总体上“更好”


      例如,如注释中所述,您实际上可以尝试解析字符串,并查看是否解析失败。这也是我链接的问题中推荐的方法,也是您应该遵循的方法。

      其他人已经提到了正则表达式解决方案(Danyal的似乎是迄今为止最全面的)。双人间的“真正”正则表达式相当复杂!请看这里的问题:

      但我认为你问的问题是错误的(尽管没有一个问题仍然涉及科学符号):

      您想要实现的是回答“这个字符串是双精度的吗?”。在这方面,有些东西比正则表达式可读性强得多,而且总体上“更好”


      例如,如注释中所述,您实际上可以尝试解析字符串,并查看是否解析失败。这也是我链接的问题中推荐的方法,也是您应该遵循的方法。

      为什么不使用
      Double\parseDouble
      并检查
      NumberFormatException
      “[0-9]+[.][0-9]+”
      -您不需要锚定,您需要允许1个或多个带有
      +
      量词的数字。对于基本正则表达式,可能需要重复的数字,这里特别是“量词”部分。为什么不使用
      Double#parseDouble
      并检查
      NumberFormatException
      “[0-9]+[.][0-9]+”
      -您不需要锚定,您需要允许1个或多个带有
      +
      量词的数字。对于基本正则表达式,您可能需要重复,这里特别是“量词”部分。锚定是多余的,因为OP使用的是
      匹配()
      @davidvorak:You所以我希望文本字段接受像:5 | 1.2 | 1.234 | 1234.13156 |等这样的数字-不知道为什么这样对你有效。@WiktorStribiżew我认为他的修改表达式不起作用,所以我最好的猜测是他从Q&a链接获取了一个更完整的表达式。锚是多余的,因为OP使用了
      matches()
      @davidvorak:You所以我想文本字段接受像:5 | 1.2 | 1.234 | 1234.13156 |等这样的数字-不知道为什么这样对你有效。@WiktorStribiżew我不认为他修改过的表达式有效,所以我最好的猜测是他从问答链接中得到了一个更完整的表达式。我想保持问题的简单。我想要达到的目标是:用户将vlaue输入文本字段。这个值将被转换成一个double,因为我需要它来处理一些数学问题。所以我希望文本字段接受诸如:5 | 1.2 | 1.234 | 1234.13156 |等数字@davidvorak:这是否意味着您需要验证用
      空格分隔的数字?请将所有相关细节添加到问题本身。对于混淆,抱歉,|只是用来分隔的@dasblinkenlight回答解决了我的问题。不过,我也要感谢你帮助我。简化问题。用户输入一个数字。程序检查它是否与我定义的正则表达式匹配,然后将其分配给一个双变量。如果它与我的正则表达式不匹配(例如,它有a、inside或用户输入字符,则会显示一条警告。@davidvorak,如果您100%确定只显示“正常”数字,则该正则表达式可以。但双精度有多种形式(1e5、10000000.47、NaN…)我想让这个问题保持简单。我想要实现的是:用户将vlaue输入文本字段。然后这个值将被转换成一个双精度值,因为我需要它来处理一些数学问题。所以我想文本字段接受像:5 | 1.2 | 1.234 | 1234.13156 |等数字。@davidvorak:这意味着你eed验证用
      空格分隔的数字|