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