【问题标题】:Regex in java positive or negative doublejava中的正则表达式正或负双精度
【发布时间】:2018-01-10 03:28:36
【问题描述】:

我需要一个正则表达式来验证正负双精度。我尝试了以下正则表达式:

^[-+]?\\d+(\\.{0,1}(\\d+?))?$

但它允许前导 0(例如 01 和 00)。如何修改我的正则表达式,使其不允许前导 0?

【问题讨论】:

  • 您可以使用:^[-+]?[1-9]\d*(?:\.?\d+)?$
  • 为什么不在 try catch 块中使用 Double.parseDouble(myString) ?
  • 你找到的不是谢谢。阿努巴瓦
  • @jeanr try/catch 实际上可能相对昂贵。此外,这对 OP 的目的不起作用,因为像 0001 这样的东西是一个完全有效的双精度,但他想拒绝它。

标签: java regex validation


【解决方案1】:

这是一个示例(.NET 语法,在 Java 中也应该可以):

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

基本上,这有一个可选的 + 或 - 符号,后跟 0 或 1 - 9 之间的数字,后跟任意位数。可选地,它可以包含一个小数点,后跟一个或多个数字。

关于这个正则表达式的重要一点(这就是解决你的问题的方法)是它有一个额外的限制,即多位数字不能以 0 开头 - 你可以有等于 完全 0,但不能有 000010.1 或 0000.0 之类的东西。像 0 或 0.0 或 100.1 之类的就可以了。

【讨论】:

  • 在Java中反斜杠需要用反斜杠转义,所以\d和\.需要改为\\d和\\.(否则Java认为你使用反斜杠作为转义字符,它不会被传递给正则表达式引擎)。其余的,是的,它与 Java 兼容。
  • @psilos 您可能必须将 \ 替换为 \\(我在 .NET 而不是 Java 中对其进行测试)。
  • 谢谢你们两个。正确的是 ** ^[+-]?(([1-9]\\d*)|0)(\\.\\d+)?** 在Java中。对不起我的答案的床格式。
【解决方案2】:

这是另一种选择,它可以处理指数,如果你想要的话:

^[+-]?([1-9][0-9]*|0)(\.[0-9]+)?((e|E)[+-]?[0-9]+)?$

我刚刚意识到,它本质上与 @EJoshuaS' 相同,只是指数加法。

这是一个验证链接:

https://regex101.com/r/WEaNLR/4

【讨论】:

  • 我喜欢 regex101 的链接。请注意,它还在那里逐步解释了正则表达式,这是 OP 了解的好工具。
  • 这与1.2不匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2012-12-07
相关资源
最近更新 更多