用于双精度数范围验证的正则表达式
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.1
到0.9
和额外的零,如99.000
和99.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])?$
我想这是最准确的:
/^(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
以为我会添加一种替代方法来实现这一点,使用我创建的用于自动生成这些范围的 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
自述文件包含更多文档和示例。
这个怎么样:
var reg = new RegExp(/^'d{1,3}'.[1-9]$/);
它适用于您提供的所有正面和负面案例。
你根本不需要正则表达式。一些简单(并且比正则表达式快得多)的数学表达式可以完成这项工作:
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。
虽然你不应该使用正则表达式来比较数字范围,但这里有一个应该适用于你的情况:
/^(?:[1-9]'d{0,2}(?:'.[1-9])?)|(?:0'.[1-9])$/
示例(未锚定):http://regex101.com/r/dY5pL3
您最好先使用正则表达式检查数字是否为双精度,然后单独检查它是否在范围内。用正则表达式之类的东西混淆业务逻辑意味着你的代码更难维护。如果您必须将业务逻辑更新为其他数字,您将很难。
[-+]?([0-9]*'.[1-9]|[0-9]+)
上面的正则表达式验证浮点数。之后,您可以只使用ParseFloat并比较其余的逻辑。
相关文章:
- Javascript中的正则表达式验证
- javascript正则表达式验证未按预期工作
- 使用 JavaScript 正则表达式验证每个列表项一个字母的逗号列表
- 在提交时检查正则表达式验证,如果为空,则聚焦所有输入字段
- 如何使用正则表达式验证单字母域名
- Javascript正则表达式验证
- 使用javascript进行正则表达式验证
- 使用正则表达式验证特定范围
- 如何使用正则表达式验证 JavaScript 中的自定义 URL
- 使用正则表达式验证电子邮件地址
- 使用正则表达式验证网址
- 使用正则表达式验证加拿大邮政编码
- javascript 正则表达式验证列表以逗号分隔
- 使用原型进行正则表达式验证
- HTML 正则表达式验证在十进制输入上仅限制一个句点
- 用于 excel 文件上传 jQuery 的正则表达式验证代码
- 两个不同 URL 的正则表达式验证表单
- 正则表达式验证 - 域电子邮件地址
- 正则表达式验证
- 时间格式的 JavaScript 正则表达式验证问题