好久没写这些东西!!
搞了一早上,就是没弄对!!
大神帮我看看呐。。
需求: 匹配 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));
1 abclearner 2017-12-05 13:44:14 +08:00 ^\d.?\d? |
2 bramblex 2017-12-05 13:47:51 +08:00 ![]() parseInt(str) > 0 && parseInt(str).toString() === str 要什么正则 |
3 bramblex 2017-12-05 13:48:15 +08:00 换成 parseFloat |
![]() | 4 zpf124 2017-12-05 13:48:40 +08:00 ![]() “你有一个问题需要解决,你选择了采用正则,现在你有两个问题了。” |
![]() | 5 zpf124 2017-12-05 13:52:04 +08:00 if(!isNaN(str)){ var val = parseInt(str); return val % 0.5 ==0; } |
6 bramblex 2017-12-05 13:52:47 +08:00 硬要用正则,我这里倒是有一段用分词的,就是复杂点。 https://github.com/bramblex/Smooth/blob/master/src/Smooth.jison#L32-L47 |
8 zgx030030 2017-12-05 13:56:05 +08:00 new RegExp('^(?<!-)\\d+(\\.[05])?$') |
![]() | 9 SakuraKuma 2017-12-05 13:57:05 +08:00 /^\d+(\.5)?$/ 要什么正则+1。 |
![]() | 10 bzw875 2017-12-05 14:01:38 +08:00 var reg = /^(\d+|\d?\.\d+)$/ 干嘛要加 g 多行匹配啊,有^$还加 g 矛盾了 |
13 jalena OP @SakuraKuma 你这个匹配不了 1.5,2.5,1.0 |
![]() | 14 bugoftime 2017-12-05 14:08:01 +08:00 ![]() 试试 /^\d+(\.[05])?$/ |
![]() | 15 SakuraKuma 2017-12-05 14:08:42 +08:00 @jalena #13 1.0 是不行,1.5/2.5 应该是没问题的,自己改改就好。 |
16 MeteorCat 2017-12-05 14:09:45 +08:00 via Android 用 paserXXX 系列+1 |
![]() | 17 b821025551b 2017-12-05 14:14:34 +08:00 ^\d+(.?(\d+))?$ |
![]() | 18 scriptB0y 2017-12-05 14:14:39 +08:00 这个问题不应该用正则解决吧,parsexxx 不是帮你做好了吗 |
20 jalena OP @b821025551b 你这个不得行的,会匹配出 1.2,2.3 这样的! |
![]() | 21 songz 2017-12-05 15:24:13 +08:00 via Android /([12][.]5)|1/g |
![]() | 22 nannanziyu 2017-12-05 15:24:53 +08:00 ^([0-9]+[\.]*)+$ https://gist.github.com/gragrance/1a86298867f21f60647fcff97879ee1b |
![]() | 23 songz 2017-12-05 15:26:43 +08:00 via Android 打错~[12]改[01] |
![]() | 24 ilotuo 2017-12-05 15:33:57 +08:00 [VerbalExpressions/JSVerbalExpressions: Javascript Regular expressions made easy]( https://github.com/VerbalExpressions/JSVerbalExpressions ) |
25 tees 2017-12-05 15:35:35 +08:00 var reg = /^\d+\.?\d*$/; |
26 tees 2017-12-05 15:35:53 +08:00 var reg = /^\-?\d+\.?\d*$/; |
![]() | 27 autoxbc 2017-12-05 16:41:54 +08:00 正则难以维护,又没有语义,能不用就不用 |
29 vincenttone 2017-12-05 18:16:24 +08:00 /\d+(?:\.[05]+)*/ 是这个意思吗? |
![]() | 30 iyangyuan 2017-12-05 19:34:09 +08:00 via iPhone 这个需求明显不应该用正则,这是数值处理,不是字符处理 |
![]() | 31 grayon 2017-12-05 22:00:12 +08:00 ^(?!0$)\d+(\.[05])?$ |
![]() | 32 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)?))$ |
![]() | 33 xiangbing74 2017-12-05 22:29:41 +08:00 菜 |
![]() | 34 hzcxdgioa 2017-12-05 22:52:21 +08:00 via Android ^(?!=-)[\d\.]+$ 先匹配正常的数字和小数,然后前面加个负号的否定环视, |
![]() | 35 shellfly 2017-12-05 23:19:23 +08:00 以数字开头,以数字或者.5 结尾? /^\d+(.5)?$/g ps: 加了 g 参数后,每次 test 好像要把 lastIndex 清零才行。 |
![]() | 36 freewind 2017-12-05 23:50:27 +08:00 /^(0|\d+(\.[05])?)$/ |
![]() | 37 feichao 2017-12-05 23:51:36 +08:00 另外一个思路: 先乘以 2, 然后判断是不是整数 这样是不是会简单点? |
38 zhx1991 2017-12-05 23:55:12 +08:00 先判断是不是数字 然后转成数字 然后直接判断 |
39 yichinzhu 2017-12-05 23:58:48 +08:00 via Android 今天踩到同样的坑,加了 g 参数之后下次匹配会从 reg.lastIndex 位置开始匹配,直到匹配不到才会把 lastIndex 清零。所以两种方案: 1. 每次匹配之后手动重置 lastIndex:reg.lastIndex=0 2. 去掉 g 选项 |
40 JerryV2 2017-12-06 08:04:16 +08:00 '\d+(\.5)?' |
41 JerryV2 2017-12-06 08:07:53 +08:00 是必须以 0.5 结尾的数字吗?那就这样呗 ^\d+\.5$ |
![]() | 42 FallMonkey 2017-12-06 08:08:45 +08:00 |
45 keenwon 2017-12-06 10:29:05 +08:00 ``` var reg = new RegExp('^\\d+(\\.5)?$'); 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)); 1>>>>>>>>>>>>true 1.5>>>>>>>>>>>>true 0.5>>>>>>>>>>>>true 0>>>>>>>>>>>>true 0.3>>>>>>>>>>>>false -1>>>>>>>>>>>>false -1.5>>>>>>>>>>>>false 2>>>>>>>>>>>>true 2.5>>>>>>>>>>>>true ``` |
![]() | 46 jason19659 2017-12-06 10:38:06 +08:00 ^\d+[\.5]*$ 为啥要用正则 |
47 lain0 2017-12-06 11:24:59 +08:00 as easy as π: https://regex101.com/r/3MF47h/1 |
![]() | 48 Morriaty 2017-12-06 11:41:57 +08:00 r'^\s*[-+]?(\d+(\.\d*)?|\.\d+)(e[-+]?\d+)?\s*$' 可匹配任意实数,包括科学计数 1e10,包括正负号 |
![]() | 49 laoyuan 2017-12-06 11:56:21 +08:00 有开头有结尾的 match,又不是抽取,基础正则 ^\d+((\.5)|(\.0))?$ |
![]() | 50 willbefly 2017-12-06 16:35:44 +08:00 ^\d+(\.(5|0))?$ 匹配 1.0 1.5 等 但有些问题的是 会匹配 0 (应该不匹配) 而且不匹配 1.50 和 1.000 (应该匹配) |
51 alex14 2017-12-06 17:09:27 +08:00 ^(?![-])\d+(\.[05])?$ |