好久没写这些东西!!
搞了一早上,就是没弄对!!
大神帮我看看呐。。
需求: 匹配 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 2
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 22
“你有一个问题需要解决,你选择了采用正则,现在你有两个问题了。”
|
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 2
试试 /^\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])?$
|