【问题标题】:Regular Expression that includes plus sign and decimal包含加号和小数的正则表达式
【发布时间】:2011-09-16 14:24:15
【问题描述】:

我在为包含 0 到 99999 之间的数字、后跟加号、后跟一位或两位数字、可选后跟小数和一位数字的字符串组合正则表达式时遇到问题。例如:

99999+99.9

这也是有效的:

0+00

这也是有效的:

0+02.5

这也是有效的:

0+2.5

我找到了这个话题:How can I check for a plus sign using regular expressions?

还有这个: Regular Expression for decimal numbers

但我无法将两者放在一起并满足上面列出的其他要求。

非常感谢您提供的任何帮助!

【问题讨论】:

  • 000+12.5 这样的零填充数字是否有效?
  • 是的,零填充没问题

标签: regex


【解决方案1】:

这应该可行:

\d{1,5}\+\d{1,2}(?:\.\d)?
  1. \d{1,5} 捕获 0 到 99999 之间的任何内容,但也允许零填充,例如0000000123(如果你不想要零填充,它会有点复杂)。

  2. \+ 匹配加号。

  3. \d{1,2} 匹配一位或两位数字。

  4. (?:\.\d) 匹配一个句点后跟一个数字。 (?:) 位表示非捕获组。

  5. 末尾的? 使非捕获组可选。

【讨论】:

  • 唯一的问题是它也允许非数字字符。 (即 99b99+99.9 不应该因为“b”而有效)。
【解决方案2】:

您需要转义加号和 . -- 像这样

\d{1,5}\+\d{1,2}\.?\d

嗯!

【讨论】:

    【解决方案3】:

    这里是

    "^[0-9]*([0-9]{0,5}\+[0-9]{1,2}(\.[0-9])?)[0-9]*$"
    

    编辑:根据您的评论,我已经修改了表达式。

    【讨论】:

    • 我的问题应该更清楚。非数字字符应该是无效的。
    • 您提出的解决方案可以防止非数字字符 - 但是,它允许加号左侧超过 5 个字符。有什么方法可以强制加号左侧最多 5 个字符?
    • 实际上,它并不强制加号左边 5 个字符、加号右边 2 个字符或小数点右边 2 个字符(如果提供了小数)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 2019-09-15
    • 2016-12-19
    相关资源
    最近更新 更多