让个正则给搞疯了!!

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));
6951 次点击
所在节点    JavaScript
51 条回复
abclearner
2017-12-05 13:44:14 +08:00
^\d.?\d?
bramblex
2017-12-05 13:47:51 +08:00
parseInt(str) > 0 && parseInt(str).toString() === str

要什么正则
bramblex
2017-12-05 13:48:15 +08:00
换成 parseFloat
zpf124
2017-12-05 13:48:40 +08:00
“你有一个问题需要解决,你选择了采用正则,现在你有两个问题了。”
zpf124
2017-12-05 13:52:04 +08:00
if(!isNaN(str)){
var val = parseInt(str);
return val % 0.5 ==0;
}
bramblex
2017-12-05 13:52:47 +08:00
硬要用正则,我这里倒是有一段用分词的,就是复杂点。
https://github.com/bramblex/Smooth/blob/master/src/Smooth.jison#L32-L47
bramblex
2017-12-05 13:56:00 +08:00
@zpf124 问题是有时候复杂分词,不用正则几乎没有其他手段处理。ㄟ( ▔, ▔ )ㄏ
zgx030030
2017-12-05 13:56:05 +08:00
new RegExp('^(?<!-)\\d+(\\.[05])?$')
SakuraKuma
2017-12-05 13:57:05 +08:00
/^\d+(\.5)?$/

要什么正则+1。
bzw875
2017-12-05 14:01:38 +08:00
var reg = /^(\d+|\d?\.\d+)$/
干嘛要加 g 多行匹配啊,有^$还加 g 矛盾了
jalena
2017-12-05 14:02:24 +08:00
@zpf124 我最开始也想用模运算,,但就是想把它用正则写出来!!
jalena
2017-12-05 14:02:46 +08:00
@bzw875 g 是全局,m 才是多行
jalena
2017-12-05 14:05:01 +08:00
@SakuraKuma 你这个匹配不了 1.5,2.5,1.0
bugoftime
2017-12-05 14:08:01 +08:00
试试 /^\d+(\.[05])?$/
SakuraKuma
2017-12-05 14:08:42 +08:00
@jalena #13 1.0 是不行,1.5/2.5 应该是没问题的,自己改改就好。
MeteorCat
2017-12-05 14:09:45 +08:00
用 paserXXX 系列+1
b821025551b
2017-12-05 14:14:34 +08:00
^\d+(.?(\d+))?$
scriptB0y
2017-12-05 14:14:39 +08:00
这个问题不应该用正则解决吧,parsexxx 不是帮你做好了吗
jalena
2017-12-05 15:11:42 +08:00
@scriptB0y 我知道直接模运算确实好做,主要是好久没整正则,就想用正则弄出来
jalena
2017-12-05 15:13:45 +08:00
@b821025551b 你这个不得行的,会匹配出 1.2,2.3 这样的!

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

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

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

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

© 2021 V2EX