簡體   English   中英

正則表達式,用於驗證貨幣數字格式

[英]Regex for validating currency number format

我有以下可接受的格式

1200000,00
1200000.00
1,200,000.00
1 200 000.00
1 200 000,00
1 200 000,0000
-1 200 000.00

目前,我僅能驗證^-?\\\\d+$^-?\\\\d+[\\\\,\\\\.]\\\\d{2}$^-?\\\\d+[\\\\,\\\\.]\\\\d{2,}$ 最后兩種格式是分開的,因此我知道是否需要舍入。 這三種格式都使用gm標志來檢查從開始^到結束$字符串。

這些正則表達式僅覆蓋列表中的前兩個元素。 使用逗號和空格進行千位分隔的其他元素尚未得到驗證,我不確定如何實現。

還有一個“美化”表達式(\\\\d)(?=(\\\\d{3})+(?!\\\\d)) ,它將把這個1200000,00變成1 200 000,00使用這樣的用法'1200000,00'.replace(('(\\\\d)(?=(\\\\d{3})+(?!\\\\d))', 'g'), '$1 ')

因此問題提出,驗證這種格式1 200 000.001,200,000.00的正確正則表達式是什么? 由於我假設與\\s\\,有所不同\\s\\,因此可以在同一表達式中輕松完成。

謝謝。

要驗證最后兩個數字,可以使用以下命令:

^-?\d{1,3}(?:[\s,]\d{3})*(?:\.\d+)?$
  1  2         3     4      5

可視化

  1. 可選減號
  2. 1..3位數字
    零個或多個由以下組成的片段
  3. 逗號或空格
  4. 3位數
  5. 可選的分數部分,由點后跟1個或多個數字組成。

由於我讀錯了,這不能直接解決問題。 但這可能仍然對某人有用,所以我讓它留下。

停止嘗試使用正則表達式解決所有問題。 當您有一個或兩個定義良好的字符串時,正則表達式非常有用。 不是一百萬種格式。

這可以用最少的正則表達式解決。 魔術在大膽的部分。

var numbers = [
    "1200000,00",
    "1200000.00",
    "1,200,000.00",
    "1 200 000.00",
    "1 200 000,00",
    "1 200 000,0000",
    "-1 200 000.00"
];

var parseWeirdNumber = function(numberString) { //Split numbers to parts. , . and space are all valid delimiters. var numberParts = numberString.split(/[.,\s]/); //Remove the last part. **This means that all input must have fraction!!** var fraction = numberParts.pop(); //Rejoin back without delimiters, and reapply the fraction. //parseFloat to convert to a number var number = parseFloat(numberParts.join('') + "." + fraction); return number; }

numbers = numbers.map(parseWeirdNumber);

console.log(numbers);

暫無
暫無

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

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