我需要一个匹配以下内容的正则表达式:
.5
0.5
1.5
1234
但不是
0.5.5
absnd (any letter character or space)
我有这个满足所有但0.5.5
^[.?\d]+$
我需要一个匹配以下内容的正则表达式:
.5
0.5
1.5
1234
但不是
0.5.5
absnd (any letter character or space)
我有这个满足所有但0.5.5
^[.?\d]+$
这是一个相当普遍的任务。我知道的最简单的处理方法是:
^[+-]?(\d*\.)?\d+$
还有其他复杂性,例如您是否要允许前导零或逗号或类似的东西。这可以像您希望的那样复杂。例如,如果你想允许 1,234,567.89 格式,你可以这样做:
^[+-]?(\d*|\d{1,3}(,\d{3})*)(\.\d+)?\b$
有一个分词,但我\b
将其用作一种偷偷摸摸的方式,要求字符串末尾至少有一个数字。这样,空字符串或单个字符串+
将不匹配。
但是,请注意,正则表达式不是解析数字字符串的理想方式。我所知道的所有现代编程语言都有快速、简单、内置的方法来做到这一点。
这是一个更简单的解决方案,它不使用任何前瞻或后瞻:
^\d*\.?\d+$
要清楚地理解为什么会这样,请从右到左阅读:
7
有效
77
有效
.77
有效
0.77
无效
空字符串
0.
无效
.77
有效
77
有效
..77
无效
.77
作品
0.77
作品
0077.77
作品作品
0077
作品不使用前瞻和后瞻的额外好处是不必担心基于 RegEx 的 DOS 攻击。
高温高压
似乎没有人考虑负数。此外,有些人正在创建一个不必要的捕获组。这是IMO最彻底的解决方案。
^[+-]?(?:\d*\.)?\d+$
这可以工作:
^(?:\d*\.)?\d+$