javascript - 如何创建像 SQL 小数类型一样匹配 (p,s) 精度和小数位数的正则表达式?

标签 javascript regex

精度(p):小数点左右的总位数

小数位数:小数点右侧的总位数

考虑到目前为止我的以下正则表达式:

^-?[0-9]+(\.[0-9]{1,3})?$
  • -?可选负数
  • [0-9] 匹配数字 0-9
  • “+”任意位数
  • “(\.[0-9]{1,3})?”可选 1-3 位小数

示例:

100.95 has a precision of 5 and a scale of 2 (5,2)

我知道如何将总数限制在左侧,将总数限制在右侧,但不知道如何封装整个值以限制“p,精度”部分,并忽略该计数中存在的句点。总计数中的 - 也需要被忽略。

更新:

这似乎有效......

^(?=(\D*\d\D*){0,5}$)-?([0-9]+)?(\.?[0-9]{0,2})?$

blank line matches
0 - match
1 - match
123 - match
123.12 - match
-1 - match
123.122 - no match

最佳答案

您可以使用 lookahead assertion从一开始就验证字符串中的数字是否与您需要的数字完全相同。

(?=(\D*\d\D*){5}$)

这将使你的整个表达式如下:

(?=(\D*\d\D*){5}$)^-?[0-9]+(\.[0-9]{1,3})?$

(为了简洁和可读性,我使用 shorthand character classes \d (数字)和 \D (非数字)。)

它匹配一个数字\d ,可能被非数字字符 \D* 包围我们不关心,并确保恰好匹配五次 {5}之前$字符串末尾。

<小时/>

更新:

这是您选择的表达式,经过一些调整进行了简化:

^(?=(\D*\d\D*){0,5}$)-?\d*(\.\d{0,2})?$

\d[0-9] 相同,因此您有一些可以删除的冗余。

  • ([\d0-9]+)?可能真的只是 \d* (不确定您是否确实使用了捕获组,在这种情况下,您应该在其周围保留括号: (\d*) )
  • \.?不需要?因为它后面可以跟 0 位数字,并且它所在的组有 ?已经
  • [\d0-9]{0,2}可以是\d{0,2}

关于javascript - 如何创建像 SQL 小数类型一样匹配 (p,s) 精度和小数位数的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36465131/

相关文章:

javascript - 使用 onclick() 时发送 html 代码

java - 使用正则表达式检测特殊字符串并仅替换其中的一部分

javascript - 使用js顺序添加div id和for属性

javascript - 内容与垂直制表符高度对齐 html, css

javascript - 我应该对函数参数进行哪些更改才能链接到另一个页面?

javascript - 预加载图像和添加类

c# - 使用正则表达式在字符串中查找不匹配的字符?

c - 如何在 C 中使用正则表达式//?单行注释

java - 正则表达式保持一致的人名

regex - Terraform GCP 正则表达式中不支持的转义序列