求助一个数字输入的正则表达式

2023-06-05 11:20:40 +08:00
 zzlit

需要满足

  1. 00 这种情况不出现输入的时候只展示 0
  2. 01 这种情况展示 1
  3. 0.1 可以出现 现在写了一个正则如下,可以满足前两点,匹配上就后面的替换掉前面的,但是一加上小数点情况就多起来了,怎么写都不太对,求大佬帮帮忙。
const reg = /(?<=^0)\d+/g;
2443 次点击
所在节点    程序员
31 条回复
bluetree2039
2023-06-05 13:27:43 +08:00
chatpgt 对 正则很 精通~
laoyutang
2023-06-05 13:39:59 +08:00
'00'.replace(/^0(?!\.)/,'')
'0'
'01'.replace(/^0(?!\.)/,'')
'1'
'0.1'.replace(/^0(?!\.)/,'')
'0.1'
zzlit
2023-06-05 13:54:47 +08:00
@zhzy
@masellum
@GzhiYi
@dinghmcn 感谢大佬提供另一种思路,只是这里原逻辑是用正则写的,我是进行的优化所以就顺着正则思路想了,我想想看怎么处理好
zzlit
2023-06-05 13:56:06 +08:00
@littlepanic72
@Alias4ck
@xiayushengfan
@Ashore
@Pipecraft
@laoyutang 感谢大佬的回答,我琢磨一下正则的规则
zzlit
2023-06-05 13:56:45 +08:00
@loading 前端,是用 vue 写的指令绑在 input 上的,对输入作限制
zzlit
2023-06-05 13:57:54 +08:00
@NoOneNoBody 我本来想的也是这两个部分,拆成两个正则来走规律,但是仔细一想想好像其实用一个正则也可以满足,就是没想好...
xiaoyai0322
2023-06-05 15:02:16 +08:00
replace(/^0*/g, '').replace(/[^\d.]/g, '')
.replace(/\.{2,}/g, '.').replace('.', '$#$')
.replace(/\./g, '').replace('$#$', '.')
.replace(/^\./g, '0.')
.replace(new RegExp("^(\\-)*(\\d+)\\.(" + '\\d'.repeat(n) + ").*$"), '$1$2.$3')
xiaoyai0322
2023-06-05 15:12:11 +08:00
replace(/^0*/g, '').replace(/[^\d.]/g, '')
.replace(/\.{2,}/g, '.').replace('.', '$#$')
.replace(/\./g, '').replace('$#$', '.')
.replace(/^\./g, '0.')

最后那个是保留几位小数 //.replace(new RegExp("^(\\-)*(\\d+)\\.(" + '\\d'.repeat(n) + ").*$"), '$1$2.$3')
magicyao
2023-06-05 15:22:12 +08:00
^([1-9][0-9]|0)*[\.]?([0-9]*[1-9])?$
wuwukai007
2023-06-05 16:18:58 +08:00
gpt4: /^0*(0\.|[1-9])/
nzbin
2023-06-05 18:27:54 +08:00
很久以前做过一个类似的需求。。。
https://www.cnblogs.com/nzbin/p/6742528.html

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

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

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

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

© 2021 V2EX