繁体   English   中英

用于双数范围验证的正则表达式

[英]Regular expression for double number range validation

我正在寻找一个正则表达式来支持双精度数,且仅包含一个小数部分,范围在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.10.9以及额外的零,例如99.00099.0

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

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

任何帮助

以下正则表达式适合您:

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

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

我猜这是最准确的:

/^(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

这个怎么样:

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

它适用于您提供的所有肯定和否定案例。

我想我会添加另一种方法来实现这一点,我创建了一个node.js javascript库来自动生成这些范围。

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

$ npm install --save to-regex-range

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

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

主要导出功能是一个采用两个整数的函数: minmax (格式为字符串或数字)。

例子

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

自述文件包含更多文档和示例。

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

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的数字
  • 该数字的小数部分是否超过一位
  • 是整数(小数部分中没有数字)

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

最好先使用Regex检查数字是否为双精度,然后再检查数字是否在范围内。 正则表达式等使业务逻辑模糊不清,这意味着您的代码难以维护。 而且,如果您必须将业务逻辑更新为其他数字,那么您将很难。

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

上述Regex验证了浮点。 之后,您可以仅解析ParseFloat并比较其余的逻辑。

虽然您不应该使用Regexp比较数字范围,但以下是适合您的情况的一种方法:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM