[英]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.