2010-09-08 127 views
0

我有一个问题:我应该匹配值从0.0到一个特定的double值(例如,我应该匹配从0.0到150.00,包括值为12,21.23213,149.111 )正则表达式匹配从0.0到150.0(包括浮点数)

任何人都可以帮助我吗?

我尝试了一切。

我用这个正则表达式匹配得分由0.0至60.0,但它并没有提前上班

(^0(\.[0-9]+)?$|^[1-9]{1}(\.[0-9]+)?$|^[1-5]{1}[0-9]{1}(\.[0-9]+)?$|^60$) 

与123不工作

谢谢

马尔科

+10

为什么不把它变成一个浮点数并检查它的数值? – BoltClock 2010-09-08 13:01:23

+6

请为上帝的爱而不要使用REGEX! AAAAAAGH! – 2010-09-08 13:03:20

+2

喝点水,@约翰。 – BoltClock 2010-09-08 13:04:18

回答

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 
} 

N.B.根据AndyE的评论,我改变了我的答案,使用Number而不是parseFloat,并在根据林可克的评论进行数字比较之前检查NaN

+1

+1,但我会使用'+'或* Number()*而不是* parseFloat()*,它将在* if *语句中解析类似“149.5grams”的* 149 *并返回* true *。 – 2010-09-08 13:17:12

+0

应该在那里打电话给'isNan'吗? – lincolnk 2010-09-08 13:31:37

+1

@Andy E,@lincolnk - 谢谢,编辑。 – 2010-09-08 14:23:50

3

忘记正则表达式 - 只是检查(parseFloat(x)= & parseFloat(x)> = 0)

8

我同意其他答案:正则表达式是做数字比较差的方式。

如果你真的到,无论是:

  • ,因为你坚持一个愚蠢的框架只允许正则表达式检查,或
  • 你需要额外的小数精度是JavaScript数字不能提供(如JavaScript有没有内置的十进制型)......这不会是这样针对整个数字0和150虽然

然后比较:

0 (加入新行/评论的可读性,取出使用。)
^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* 
)$ 

这不支持E-符号(150 = 1.5E2),但除此之外,允许什么正常JS数字分析会。