我需要一个与以下内容匹配的正则表达式:
.5
0.5
1.5
1234
Run Code Online (Sandbox Code Playgroud)
但不是
0.5.5
absnd (any letter character or space)
Run Code Online (Sandbox Code Playgroud)
我有这个满足所有但是 0.5.5
^[.?\d]+$
Run Code Online (Sandbox Code Playgroud)
Jus*_*gan 22
这是一项相当普遍的任务.我知道处理它的最简单方法是:
^[+-]?(\d*\.)?\d+$
Run Code Online (Sandbox Code Playgroud)
还有其他一些复杂情况,例如是否要允许前导零或逗号或类似的东西.这可能会像你想要的那样复杂.例如,如果要允许1,234,567.89格式,可以使用以下命令:
^[+-]?(\d*|\d{1,3}(,\d{3})*)(\.\d+)?\b$
Run Code Online (Sandbox Code Playgroud)
这\b有一句话休息,但我使用它作为需要在字符串的结尾至少一个数字偷偷摸摸.这样,空字符串或单个字符串+将不匹配.
但是,请注意,正则表达式不是解析数字字符串的理想方法.我所知道的所有现代编程语言都有快速,简单的内置方法.
Tyl*_*ton 10
似乎没有人会对负数进行说明.此外,有些人正在创建一个不必要的捕获组.这是IMO最彻底的解决方案.
^[+-]?(?:\d*\.)?\d+$
Run Code Online (Sandbox Code Playgroud)
编辑:为什么要downvote?
这是一个更简单的解决方案,它不使用任何先行或后备方式:
^\d*\.?\d+$
Run Code Online (Sandbox Code Playgroud)
为了清楚地理解为什么这样做,请从右到左阅读:
7Works
77Works
.77Works
0.77Works
0.不起作用
.77作品
77的作品
..77不工作
.77作品
0.77作品
0077.77作品
0077作品不使用前瞻性和后视性的另一个好处是不必担心基于RegEx的DOS攻击。
高温超导
| 归档时间: |
|
| 查看次数: |
20919 次 |
| 最近记录: |