正则表达式匹配从0.0到150.0(包括浮点)

0 javascript regex

我有一个问题:我应该将值从0.0匹配到特定的double值(例如,我应匹配从0.0到150.00,包括值为12,21.23213,149.111)

有人可以帮帮我吗?

我尝试了一切.

我用这个正则表达式匹配0.0到60.0,但它不起作用

(^0(\.[0-9]+)?$|^[1-9]{1}(\.[0-9]+)?$|^[1-5]{1}[0-9]{1}(\.[0-9]+)?$|^60$)
Run Code Online (Sandbox Code Playgroud)

用123它不起作用

先感谢您

马尔科

Dom*_*ger 14

不要使用正则表达式 - 使用Number,检查它是一个数字isNaN,然后使用<=和比较值>=.

例如

var your_val = "3.05";
var your_val_num = Number(your_val);
if (!isNaN(your_val_num) && your_val_num >= 0 && your_val_num <= 150) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

NB 根据林肯的评论,我根据AndyE的评论改变了我的使用答案,Number而不是在进行数值比较之前parseFloat检查NaN.


bob*_*nce 8

我同意其他答案:正则表达式是一种糟糕的数字比较方法.

如果你真的需要,或者:

  • 因为你所坚持的愚蠢框架只允许正则表达式检查,或者
  • 你需要一个JavaScript编号无法提供的额外小数精度(因为JavaScript没有内置的Decimal类型)...虽然这不是与0和150的整数进行比较的情况

然后:

^0*(                    // leading zeroes
150(\.0+)?|             // either exactly 150
1[0-4]\d(\.\d+)?|       // or 100-149.9*
\d{0,2}(\.\d+)?         // or 0-99.9*
)$
Run Code Online (Sandbox Code Playgroud)

(添加了换行符/注释以便于阅读,删除即可使用.)

这不支持E-notation(150 = 1.5E2),但应该允许正常的JS Number解析.