我需要一个与以下内容匹配的正则表达式:
.5
0.5
1.5
1234
但不是
0.5.5
absnd (any letter character or space)
我有这个满足除0.5.5
^[.?\d]+$
答案 0 :(得分:21)
这是一项相当普遍的任务。我知道处理它的最简单方法是:
^[+-]?(\d*\.)?\d+$
还有其他一些并发症,例如是否要允许前导零或逗号或类似的东西。这可能会像你想要的那样复杂。例如,如果要允许1,234,567.89格式,可以使用:
^[+-]?(\d*|\d{1,3}(,\d{3})*)(\.\d+)?\b$
\b
有一个单词中断,但是我用它作为一种偷偷摸摸的方式,要求在字符串的末尾至少有一个数字。这样,空字符串或单个+
将不匹配。
但是,请注意正则表达式不是解析数字字符串的理想方法。我所知道的所有现代编程语言都有快速,简单的内置方法。
答案 1 :(得分:10)
似乎没有人会对负数进行说明。此外,有些人正在创建一个不必要的捕获组。这是IMO最彻底的解决方案。
^[+-]?(?:\d*\.)?\d+$
编辑:为什么选择downvote?
答案 2 :(得分:6)
这是一个更简单的解决方案,不使用任何先行或后视:
^\d*\.?\d+$
要清楚地了解其原因,请从右到左阅读:
7
有效
77
有效
.77
有效
0.77
有效
0.
不起作用
.77
有效
77
有效
..77
不起作用
.77
有效
0.77
有效
0077.77
有效
0077
正常工作不使用预见和后视还有一个额外的好处,就是不必担心基于RegEx的DOS攻击。
HTH
答案 3 :(得分:3)
答案 4 :(得分:1)
这可行:
^(?:\d*\.)?\d+$