首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript中数字和小数点的正则表达式

javascript中数字和小数点的正则表达式
EN

Stack Overflow用户
提问于 2016-08-25 14:46:55
回答 4查看 9.3K关注 0票数 0

我已经检查了下面的正则表达式链接

Regex to match 2 digits, optional decimal, two digits

正则表达式应接受整数或小数点。最大长度为小数前10位,小数后4位。

从上面的链接(2位小数点)尝试下面的代码

代码语言:javascript
复制
\d{0,2}(\.\d{1,2})?

var patt =new RegExp("\d{0,2}(\.\d{1,2})?")
undefined
patt.test(1)
true
patt.test(1.1)
true
patt.test(11)
true
patt.test(111.111)
true

对于小数点后的3位数,也会给出真值,这是无效的。

EN

回答 4

Stack Overflow用户

发布于 2016-08-25 14:54:34

您必须使用分隔符来确定匹配的开始位置和结束位置。你说max length should be 10 numbers before decimal and 4 digits after decimal,所以你的限制也是不正确的:

代码语言:javascript
复制
var patt = /^\d{1,10}(\.\d{1,4})?$/;

代码语言:javascript
复制
var patt = new RegExp(/^\d{1,10}(\.\d{1,4})?$/);

console.log( patt.test(1) );                // true
console.log( patt.test(1.1) );              // true
console.log( patt.test(11.11) );            // true
console.log( patt.test(111.111) );          // true
console.log( patt.test(1111.1111) );        // true
console.log( patt.test(1111111111.1111) );  // true

console.log( patt.test(111.11111) );        // false, because to long after decimal
console.log( patt.test(11111111111.1111) ); // false, because to long before decimal

或者按照这里的建议,不使用RegExp,而使用文本。在某些浏览器中,RegExp可能存在支持问题。输出是相同的,所以最好使用这个解决方案:

代码语言:javascript
复制
var patt = /^\d{1,10}(\.\d{1,4})?$/;

console.log( patt.test(1) );                // true
console.log( patt.test(1.1) );              // true
console.log( patt.test(11.11) );            // true
console.log( patt.test(111.111) );          // true
console.log( patt.test(1111.1111) );        // true
console.log( patt.test(1111111111.1111) );  // true

console.log( patt.test(111.11111) );        // false, because to long after decimal
console.log( patt.test(11111111111.1111) ); // false, because to long before decimal

票数 8
EN

Stack Overflow用户

发布于 2016-08-25 14:50:16

正则表达式没有说字符串应该以最后一个字符结束,或者从第一个字符开始。尝试:

代码语言:javascript
复制
var patt = /^\d{1,2}(\.\d{1,2})?$/;

对于要求之前的10位数和要求后的4位数:

代码语言:javascript
复制
var patt = /^\d{1,10}(\.\d{1,4})?$/;
票数 2
EN

Stack Overflow用户

发布于 2016-08-25 15:15:59

你为什么不直接检查一下:

代码语言:javascript
复制
 input < Math.pow(10,10) && input % Math.pow(10,-4) == 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39138440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档