簡體   English   中英

Javascript 的復雜貨幣正則表達式的提示?

[英]Hints for a complex currency regular expression for Javascript?

我需要在 web 頁面中匹配無限數量的數字。

我需要能夠匹配以下所有格式:

100 $
99$
$99
$ 8
$.99
$ .8
$ 99.8
.99$
.99 $
9.2 $
1.2$

等價於使用逗號:

444,333
22,333
1,222
11,111,111
333,333,333,333.01132

或空格:

444 333
22 333
1 222
11 111 111
333 333 333 333.01132

這對我來說真的很難。 我習慣於玩正則表達式,但我完全沒能寫出防彈的東西。 通常http://www.regexlib.com有解決方案,但這個沒有。

除了使用 regexp 之外,我想不出其他方法,因為它是純文本搜索/替換。

這是一個匹配您提供的所有數字格式的正則表達式:

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

分解它:

  • ^(?:\$\s*)? 將在字符串的開頭查找可選的 $,后跟任意數量的空格
  • (?:(?:\d{0,3}(?:[, ]\d{0,3])*[, ])+\d{3}|\d*)將匹配分解的數字分成由逗號或空格分隔的組( \d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3} )或一串數字( \d+ ) -- 因此 123,456,789、123 456 789 和 123456789 將全部匹配。 正則表達式不會接受分組不正確的數字(因此不會匹配 123,45,6789)
  • (?:\.\d*)? 將匹配一個帶有可選小數點的數字和之后的任意數量的數字
  • (?:\s*\$)?$將匹配字符串末尾的可選 $,前面有任意數量的空格。

為什么要寫 1 個正則表達式,當你可以寫幾個並依次應用它們時?

我假設(?)您可以逐行迭代。 為什么不嘗試使用精通逗號的正則表達式,然后是精通空格的正則表達式等? 如果匹配,則不必費心嘗試 rest,存儲結果並轉到下一行。

如何分兩步執行此操作:

首先用''替換所有空格

然后,如果數字格式始終相同,您可以用 '' 替換逗號

在那之后,它很容易,不是嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM