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