regex 使用正则表达式定义财务数字

7uhlpewt  于 2023-08-08  发布在  其他
关注(0)|答案(3)|浏览(95)

以下是各种财务显示的有效数字,具体取决于地区等:

1,000
1000.00
1,000,000.00
2.000.000,00
123748 # without commas
4 294 967 295,000
0.24
.24
24
24.

字符串
为上述模式查找正则表达式的更好方法是什么?为每个模式执行一个大型正则表达式还是多个正则表达式?例如,单个图案类似于:

no_thousands_separator = '\d+[.,]?\d{0,3}?

13z8s7eq

13z8s7eq1#

你可能想设计一些表达式,不完全是,但可能类似于,

^\.?(?:(?:\d{1,3}[,. ])*\d{1,3}(?:\.\d{2})?|\d+\.\d+|\d+)\.?$

字符串
一种设计方法是寻找最复杂的模式,编写一个表达式,修改,然后继续使用最简单的模式。

Demo

我刚刚在表达式的开头和结尾添加了两个\.?,但这并不完全正确,您将在任何您想要的地方合并它们。
如果您希望简化/修改/探索表达式,在regex101.com的右上角面板中有解释。如果愿意,还可以在this link中观察它如何与一些示例输入匹配。

RegEx电路

jex.im可视化正则表达式:
x1c 0d1x的数据

This expression would not validate, but only pass those numbers

ukxgm1gy

ukxgm1gy2#

您可以创建一个正则表达式,以使事情更加简单:

\d*(?:([., ])(?:\d{3}\1)*\d{3})?(?:[.,]\d*)?

字符串
Inspect on regex101.com
这是如何工作的?

\d*          Where numbers can occur
([., ])?     Capture the thousands separator
\d{3}        Match 3 digits between separators
\1           Recall thousands separator
(?:[.,]\d*)? Optionally capures decimal part (no thousands separator allowed here)

az31mfrm

az31mfrm3#

使用下面的正则表达式:

function parseNum(str) {
   const match = /^[\d.,\s]+$/.exec(str);

   return match ? match[0] : null;
}

字符串

相关问题