1

我寻找一个正则表达式来支持只有一个小数部分的双数,范围在 0.1 到 999.9 之间

这意味着不允许使用以下值:

0
0.0 // less than lower bound
0.19 // fraction part is 2 digits, right '9' is extra
94.11 // fraction part is 2 digits, right '1' is extra
999.90 // fraction part is 2 digits, '0' is extra
9.0 // should be 9 or 9.1, 9.0 is wrong
1000 // is higher than upper bound

允许的:

1.1
55.5
999.9

我的正则表达式是:

(^(\.[1-9])?$|(^[1-9][0-9]{0,2}?(\.[1-9])?$))$

不支持0.1to0.9和额外的零,例如99.000and99.0

测试步骤: 在您的浏览器控制台中:

var reg = new RegExp(/(^(\.[1-9])?$|(^[1-9][0-9]{0,2}?(\.[1-9])?$))$/);
reg.test(12);

任何帮助

4

7 回答 7

3

以下正则表达式应该适合您:

^[1-9]([0-9]{1,2})?(\.[1-9])?$

现场演示: http: //fiddle.re/9u9cd

于 2013-10-28T10:58:31.613 回答
2

我想这是最准确的:

/^(0\.[1-9]|[1-9][0-9]{0,2}(\.[1-9])?)$/

请注意,使用正则表达式时不需要RegExp构造函数:

 re = /^(0\.[1-9]|[1-9][0-9]{0,2}(\.[1-9])?)$/
 a = [0, 0.1, 123, 123.4, '00.1', 123.45, 123456, 'foo']
 a.map(function(x) { console.log(x, re.test(x)) })

0 false
0.1 true
123 true
123.4 true
00.1 false
123.45 false
123456 false
foo false
于 2013-10-28T11:24:45.173 回答
2

以为我会添加另一种方法来使用我为自动生成这些范围而创建的 node.js javascript 库来完成此任务。

要使用该库,您首先需要使用npm安装它:

$ npm install --save to-regex-range

然后使用以下代码行将库添加到您的应用程序

var toRegexRange = require('to-regex-range');

主要导出是一个接受两个整数的函数:min值和max值(格式化为字符串或数字)。

例子

console.log(toRegexRange('111', '555'));
//=> 11[1-9]|1[2-9][0-9]|[2-4][0-9]{2}|5[0-4][0-9]|55[0-5]

console.log(toRegexRange('5', '5'));
//=> 5

console.log(toRegexRange('5', '6'));
//=> [5-6]

console.log(toRegexRange('51', '229'));
//=> 5[1-9]|[6-9][0-9]|1[0-9]{2}|2[0-2][0-9]

console.log(toRegexRange('29', '51'));
//=> 29|[3-4][0-9]|5[0-1]

console.log(toRegexRange('1', '100000'));
//=> [1-9]|[1-9][0-9]{1,4}|100000

自述文件有更多文档和示例。

于 2017-04-22T07:27:33.243 回答
1

这个怎么样:

var reg = new RegExp(/^\d{1,3}\.[1-9]$/);

它适用于您提供的所有正面和负面案例。

于 2013-10-28T10:48:42.297 回答
0

你根本不需要正则表达式。一些简单的(并且比正则表达式快得多)数学方程可以完成这项工作:

function testNumber(number) {
    if (number < 0.1 || number > 999.9 || parseInt(10*number) != 10*number || number == parseInt(number))
        return false;

    return true;
}

alert( testNumber(12) );

if声明中,我们检查 4 件事:

  • 是小于 0.1 的数
  • 是高于 999.9 的数字
  • 小数部分的数字是否超过一位
  • 是整数(小数部分没有数字)

如果上述任何条件为,则 te 函数返回false

于 2013-10-28T10:48:37.877 回答
0

您最好先使用正则表达式检查数字是否为双精度数,然后单独检查它是否在范围内。让业务逻辑被 Regex 之类的东西混淆意味着你的代码更难维护。而且,如果您必须将业务逻辑更新为其他数字,您将很难过。

[-+]?([0-9]*\.[1-9]|[0-9]+)

上面的正则表达式验证了一个浮点数。之后,您只需 ParseFloat 并比较其余的逻辑。

于 2013-10-28T10:48:54.017 回答
0

虽然您不应该使用 Regexp 来比较数字范围,但这里应该适用于您的情况:

/^(?:[1-9]\d{0,2}(?:\.[1-9])?)|(?:0\.[1-9])$/

示例(未锚定):http ://regex101.com/r/dY5pL3

于 2013-10-28T10:51:40.713 回答