javascript - 数字范围的正则表达式约束,限制为小数点后 3 位
问题描述
对于输入验证(约束用户,使他们不能输入错误的输入),我想在 JavaScript 中创建一个正则表达式来约束,以便:
有两个数字,用连字符隔开,每个数字末尾可以有一个小数点,后跟最多三个数字(3dp)
任何输入到此的内容都应该通过正则表达式,所以;
0
02
023.
023.2
023.22
023.223-
023.223-3
023.223-33
023.223-333
023.223-333.
023.223-333.3
023.223-333.33
023.223-333.333
都是有效值,例如,此格式之外的任何内容都应该是无效的;
0.2343
0.233-0.2343
我在验证连字符两边的数字方面取得了一些成功;
^\d*\.?(\d{1,3})?$
然后我在两边都包括这个,中间有一个连字符;
^\d*\.?(\d{1,3})?\-?\d*\.?(\d{1,3})?$
在这里查看:https ://regex101.com/r/klw01G/1
这个解决方案的问题是它允许第一个数字集有无限的小数位。我很困惑,因为它按预期适用于第二组,仅限于 3dp。
将第一组限制为 3dp 的解决方案是什么?必须有基于.
角色的条件吗?
解决方案
您需要嵌套可选组:
^\d+(?:\.\d{0,3}(?:-(?:\d+(?:\.\d{0,3})?)?)?)?$
如果您还需要允许空字符串,请使用可选组将整个部分包裹在^
和$
锚点之间:
^(?:\d+(?:\.\d{0,3}(?:-(?:\d+(?:\.\d{0,3})?)?)?)?)?$
细节
^
- 字符串的开始\d+
- 1+ 位数(?:\.\d{0,3}(?:-(?:\d+(?:\.\d{0,3})?)?)?)?
- 一个可选的序列\.\d{0,3}
-.
和 0 到 3 位数字(?:-(?:\d+(?:\.\d{0,3})?)?)?
- 一个可选的序列-
- 一个连字符(?:\d+(?:\.\d{0,3})?)?
- 一个可选的序列\d+
- 1+ 位数(?:\.\d{0,3})?
- 一个点的可选序列,然后是 0 到 3 位数字
$
- 字符串结束
推荐阅读
- python - 在进行多项选择时面临问题
- mac-address - 如何使用 MAC 地址阻止 OpenVPN 访问
- python - 使用 BeautifulSoup在流文本B中刮取 B
- python - 通过重复序列填充列
- excel - Power Pivot 多对多关系
- google-apps-script - 使用 Google 应用脚本更改 Google 表格共享设置
- typescript - 如何使用 Typescript 在 Material UI 中扩展调色板
- swift - 有没有办法让 SwiftUI 文本标签在显示计时器时不会轻微移动?
- javascript - FindDomNode 弃用警告,尽管使用了 ref
- java - 如何在不损坏的情况下将图像从 java 套接字服务器发送到导航器?