需要满足
- 00 这种情况不出现输入的时候只展示 0
- 01 这种情况展示 1
- 0.1 可以出现 现在写了一个正则如下,可以满足前两点,匹配上就后面的替换掉前面的,但是一加上小数点情况就多起来了,怎么写都不太对,求大佬帮帮忙。
const reg = /(?<=^0)\d+/g;
需要满足
const reg = /(?<=^0)\d+/g;
|
littlepanic72Jun 5, 2023
1
[-+]?\b[0-9]*\.?[0-9]+\b regexbuddy 从这个软件找出来的... 安利一个
|
|
littlepanic72Jun 5, 2023
2
@littlepanic72 好像不行...
|
|
zhzyJun 5, 2023
3
其实写不明白的话, 可以考虑不用正则来做吧...
|
|
dreaskyJun 5, 2023
4
parseFloat 不就得了
|
|
masellumJun 5, 2023
5
这需求不用正则也可以,写成显式的逻辑还更好维护,何必麻烦自己一定要上正则。
|
|
noahliasznJun 5, 2023
6
|
|
xiayushengfanJun 5, 2023
7
chatgpt
|
|
noahliasznJun 5, 2023
8
|
|
xiayushengfanJun 5, 2023
9
^(0|[1-9]\d*)(\.\d+)?$
|
|
GzhiYiJun 5, 2023
10
有点像是强制输入数值型,比如说价格这种需求。同意楼上说的,获取输入字符后,走 if else 判断一些特殊的输入,最后再走合适的正则。
|
|
dinghmcnJun 5, 2023
11
参考 #4 楼的做法,大学的时候做计算器,就解决过类似的问题;使用保存都使用浮点型显示的时候转换成字符串
|
|
AshoreJun 5, 2023
12
/^0*(?:[1-9][0-9]*|0(?:\.[0-9]+)?)$/
|
|
loadingJun 5, 2023
13
如果是 el-input 的话,formatter parser 再结合 holder 应该就可以了,如果是前端,很好做。
你是普通 gui 还是前端 |
|
littlepanic72Jun 5, 2023
14
@Alias4ck 这个也有点点问题....+0010086 用这样子写的时候他还是会把 00 都认为匹配.... 不加正负号的情况 这个代码就很好了....
|
|
littlepanic72Jun 5, 2023
15
@Alias4ck +0010086 也通不过这个测试
|
|
noahliasznJun 5, 2023
16
@littlepanic72 再改下就好了 (?![+-]?0\d)[+-]?\d*\.?\d+
|
|
17
@littlepanic72 其实不会出现你这种情况+001002 / -0023123,你发的这种数字就不太合理
|
|
laoyutangJun 5, 2023 via Android
18
str.replace(/^0*(?!\.)/,'')
|
|
NoOneNoBodyJun 5, 2023
19
你这是两个需求:校验和替换,各自正则不同,同时实施的话需要有 callback 功能的语言
只考虑替换的话: ^([-+])?(0+)(([1-9][0-9\.]?)|0)$ --> $1$3 如果全 0 带符号的情况,去掉符号的我还要想一下,这个还不行 |
|
20
把开头连续的 0 去掉就可以。
``` function removeLeadingZero(num) { const regex = /^([+-]?)0+(?=\d)/ return num.replace(regex, "$1") } console.log(removeLeadingZero("00")) // 0 console.log(removeLeadingZero("000")) // 0 console.log(removeLeadingZero("01")) // 1 console.log(removeLeadingZero("001")) // 1 console.log(removeLeadingZero("0.1")) // 0.1 console.log(removeLeadingZero("+0.1")) // +0.1 console.log(removeLeadingZero("-0.1")) // -0.1 console.log(removeLeadingZero("00.1")) // 0.1 console.log(removeLeadingZero("0012340012")) // 12340012 console.log(removeLeadingZero("+0010086")) // +10086 console.log(removeLeadingZero("-0010086")) // -10086 console.log(removeLeadingZero("+000000")) // +0 ``` |
|
bluetree2039Jun 5, 2023
21
chatpgt 对 正则很 精通~
|
|
laoyutangJun 5, 2023
22
'00'.replace(/^0(?!\.)/,'')
'0' '01'.replace(/^0(?!\.)/,'') '1' '0.1'.replace(/^0(?!\.)/,'') '0.1' |
|
23
|
|
24
|
|
26
@NoOneNoBody 我本来想的也是这两个部分,拆成两个正则来走规律,但是仔细一想想好像其实用一个正则也可以满足,就是没想好...
|
|
xiaoyai0322Jun 5, 2023
27
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') |
|
xiaoyai0322Jun 5, 2023
28
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') |
|
magicyaoJun 5, 2023
29
^([1-9][0-9]|0)*[\.]?([0-9]*[1-9])?$
|
|
wuwukai007Jun 5, 2023
30
gpt4: /^0*(0\.|[1-9])/
|
|
nzbinJun 5, 2023
31
很久以前做过一个类似的需求。。。
https://www.cnblogs.com/nzbin/p/6742528.html |