-1

可能重复:
精度为 2 的小数的简单正则表达式

嗨,我需要使用正则表达式验证一个数字。主要思想是我有一个数字的整数部分、小数部分和小数分隔符。例如,如果我有这个:

var integer_part = 4;
var decimal_part = 2;
var decimal_separator = ".";

// will be valid numbers
// 2546.33 
// 12
// 1.33
// 263
// 0

我可以用变量中的值创建一个正则表达式字符串来验证字符串吗?

4

3 回答 3

3

您不需要正则表达式:

!isNaN(parseFloat(n)) && isFinite(n);

检查数字是浮点数,不是 NaN 也不是无穷大。

这听起来像是一个 XY 问题。你应该问的是How can I validate a number?,把正则表达式部分排除在外。

于 2012-12-07T18:22:51.490 回答
1

尽管您的问题尚不清楚,但我假设您想使用变量来确定正则表达式中允许值的范围如果是这样,您可以使您的模式字符串如下所示:

pattern = '/[\d]{0,' + integer_part + '}(' + decimal_separator + '[\d]{1,' + decimal_part + '})?/';

这是一个基本的实现。在这种情况下,为了.用作分隔符,您实际上需要设置decimal_separator = '\.';这是为了转义正则表达式中的通配符匹配的小数。

如果您真的想寻找更多的边缘情况,您可能希望像这样有条件地构建您的模式:

pattern = '/[\d]{0,' + integer_part + '}';
if (decimal_part > 0) {
    if (decimal_separator == '.') {
        pattern += '(\.';
    } else {
        pattern +=  '(' + decimal_separator;
    }
    pattern += '[\d]';
    if (decimal_part == 1) {
         pattern += '{1}';
    } else {
         pattern += '{1,' + decimal_part + '}';
    }
    pattern += ')?';
}
pattern += '/';
于 2012-12-07T18:24:37.977 回答
0

只需使用此正则表达式,它会查找任何内容

\d+(\.\d+)

但是,可能有更好的方法来做到这一点。

Boolean isFloat=false;
try
{
   float num=parseFloat(n);
   isFloat=!isNaN(num) && isFinite(num);
}
catch (NumberFormatException ex)
{
   //Isn't a number
}
于 2012-12-07T18:22:42.730 回答