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

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 条回复
littlepanic72
2023-06-05 11:26:02 +08:00
[-+]?\b[0-9]*\.?[0-9]+\b regexbuddy 从这个软件找出来的... 安利一个
littlepanic72
2023-06-05 11:27:08 +08:00
@littlepanic72 好像不行...
zhzy
2023-06-05 11:27:32 +08:00
其实写不明白的话, 可以考虑不用正则来做吧...
dreasky
2023-06-05 11:31:45 +08:00
parseFloat 不就得了
masellum
2023-06-05 11:34:31 +08:00
这需求不用正则也可以,写成显式的逻辑还更好维护,何必麻烦自己一定要上正则。
Alias4ck
2023-06-05 11:40:46 +08:00
xiayushengfan
2023-06-05 11:42:58 +08:00
chatgpt
Alias4ck
2023-06-05 11:46:01 +08:00
xiayushengfan
2023-06-05 11:48:09 +08:00
^(0|[1-9]\d*)(\.\d+)?$
GzhiYi
2023-06-05 11:49:26 +08:00
有点像是强制输入数值型,比如说价格这种需求。同意楼上说的,获取输入字符后,走 if else 判断一些特殊的输入,最后再走合适的正则。
dinghmcn
2023-06-05 11:52:24 +08:00
参考 #4 楼的做法,大学的时候做计算器,就解决过类似的问题;使用保存都使用浮点型显示的时候转换成字符串
Ashore
2023-06-05 11:52:35 +08:00
/^0*(?:[1-9][0-9]*|0(?:\.[0-9]+)?)$/
loading
2023-06-05 11:54:29 +08:00
如果是 el-input 的话,formatter parser 再结合 holder 应该就可以了,如果是前端,很好做。

你是普通 gui 还是前端
littlepanic72
2023-06-05 12:14:54 +08:00
@Alias4ck 这个也有点点问题....+0010086 用这样子写的时候他还是会把 00 都认为匹配.... 不加正负号的情况 这个代码就很好了....
littlepanic72
2023-06-05 12:15:54 +08:00
@Alias4ck +0010086 也通不过这个测试
Alias4ck
2023-06-05 12:18:29 +08:00
@littlepanic72 再改下就好了 (?![+-]?0\d)[+-]?\d*\.?\d+
Alias4ck
2023-06-05 12:21:42 +08:00
@littlepanic72 其实不会出现你这种情况+001002 / -0023123,你发的这种数字就不太合理
laoyutang
2023-06-05 12:28:18 +08:00
str.replace(/^0*(?!\.)/,'')
NoOneNoBody
2023-06-05 12:32:41 +08:00
你这是两个需求:校验和替换,各自正则不同,同时实施的话需要有 callback 功能的语言

只考虑替换的话:
^([-+])?(0+)(([1-9][0-9\.]?)|0)$ --> $1$3
如果全 0 带符号的情况,去掉符号的我还要想一下,这个还不行
Pipecraft
2023-06-05 13:25:09 +08:00
把开头连续的 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

```

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

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

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

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

© 2021 V2EX