让个正则给搞疯了!!

2017-12-05 13:35:58 +08:00
 jalena

好久没写这些东西!!

搞了一早上,就是没弄对!!

大神帮我看看呐。。

需求: 匹配 0.5、1、1.5 这样的数据(不能为负数)

var reg = new RegExp('^(^[0-])|(\\d+(\\.[05])?$)','g');
var str = '1';
var str1 = '1.5';
var str2 = '0.5';
var str3 = '0';
var str4 = '0.3';
var str5 = '-1';
var str6 = '-1.5';
var str7 = '2';
var str8 = '2.5';
console.log(str + ">>>>>>>>>>>>" + reg.test(str));
console.log(str1 + ">>>>>>>>>>>>" + reg.test(str1));
console.log(str2 + ">>>>>>>>>>>>" + reg.test(str2));
console.log(str3 + ">>>>>>>>>>>>" + reg.test(str3));
console.log(str4 + ">>>>>>>>>>>>" + reg.test(str4));
console.log(str5 + ">>>>>>>>>>>>" + reg.test(str5));
console.log(str6 + ">>>>>>>>>>>>" + reg.test(str6));
console.log(str7 + ">>>>>>>>>>>>" + reg.test(str7));
console.log(str8 + ">>>>>>>>>>>>" + reg.test(str8));
6959 次点击
所在节点    JavaScript
51 条回复
songz
2017-12-05 15:24:13 +08:00
/([12][.]5)|1/g
nannanziyu
2017-12-05 15:24:53 +08:00
songz
2017-12-05 15:26:43 +08:00
打错~[12]改[01]
ilotuo
2017-12-05 15:33:57 +08:00
[VerbalExpressions/JSVerbalExpressions: JavaScript Regular expressions made easy]( https://github.com/VerbalExpressions/JSVerbalExpressions )
tees
2017-12-05 15:35:35 +08:00
var reg = /^\d+\.?\d*$/;
tees
2017-12-05 15:35:53 +08:00
var reg = /^\-?\d+\.?\d*$/;
autoxbc
2017-12-05 16:41:54 +08:00
正则难以维护,又没有语义,能不用就不用
hibobby
2017-12-05 17:15:15 +08:00
@autoxbc 这句话的来源在哪里?
vincenttone
2017-12-05 18:16:24 +08:00
/\d+(?:\.[05]+)*/
是这个意思吗?
iyangyuan
2017-12-05 19:34:09 +08:00
这个需求明显不应该用正则,这是数值处理,不是字符处理
grayon
2017-12-05 22:00:12 +08:00
^(?!0$)\d+(\.[05])?$
akira
2017-12-05 22:20:07 +08:00
^(1|1\.5|0\.5)$ 完美满足啊,1 或者 1.5 或者 0.5 :dodge



前面数字,后面带 .5 或者 .0 或者没有
^(\d+((\.5)?|(\.0)?))$
xiangbing74
2017-12-05 22:29:41 +08:00
菜🐔
hzcxdgioa
2017-12-05 22:52:21 +08:00
^(?!=-)[\d\.]+$

先匹配正常的数字和小数,然后前面加个负号的否定环视,
shellfly
2017-12-05 23:19:23 +08:00
以数字开头,以数字或者.5 结尾?
/^\d+(.5)?$/g

ps: 加了 g 参数后,每次 test 好像要把 lastIndex 清零才行。
freewind
2017-12-05 23:50:27 +08:00
/^(0|\d+(\.[05])?)$/
feichao
2017-12-05 23:51:36 +08:00
另外一个思路: 先乘以 2, 然后判断是不是整数 这样是不是会简单点?
zhx1991
2017-12-05 23:55:12 +08:00
先判断是不是数字

然后转成数字

然后直接判断
yichinzhu
2017-12-05 23:58:48 +08:00
今天踩到同样的坑,加了 g 参数之后下次匹配会从 reg.lastIndex 位置开始匹配,直到匹配不到才会把 lastIndex 清零。所以两种方案:
1. 每次匹配之后手动重置 lastIndex:reg.lastIndex=0
2. 去掉 g 选项
JerryV2
2017-12-06 08:04:16 +08:00
'\d+(\.5)?'

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/412135

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX