簡體   English   中英

正則表達式在 javascript 中查找負數

[英]Regex To Find negative number in javascript

我正在嘗試使用 javascript 解決以下問題,如果有人遇到類似問題請告訴我,任何指針都會很有幫助。

我正在研究貨幣格式,不同的國家/地區可以對負貨幣格式進行不同的表示。

要求:如果數字以 - 開頭/結尾-將此類值視為負數。 同樣,如果數字以()開頭/結尾,則將此類值視為負數。

-123.55 = > Negative True 
123.55 = > Negative False 
(123.55) => Negative True

我的代碼

 console.log('1234,56' + ' vs ' + formatNumber('1234,56', '', ',')); console.log('1234.56' + ' vs ' + formatNumber('1234.56', '', '.')); console.log('-1,234.567' + ' VS ' + formatNumber('-1,234.567', ',', '.')); console.log('1,234.567-' + ' VS ' + formatNumber('1,234.567-', ',', '.')); console.log("1'234,567-" + " VS " + formatNumber("1'234,567-", "'", ',')); console.log("1'234.567-" + " VS " + formatNumber("1'234.567-", "'", '.')); console.log("1.234,567-" + " VS " + formatNumber("1.234,567-", ".", ',')); function formatNumber(sourceString, groupseperator, decimalSeperator) { let negativeNumber = false; var negRegexp = new RegExp("[-|)]$", "g"); var match = negRegexp.exec(sourceString); if (match && match.length > 0) { console.log(match[0]); negativeNumber = true; } //Step1:Replace braces space from the string sourceString = sourceString.replace(/[`\s-()'\]\\\/]/gi, ''); //Step2:Replace All Group Seperator with blank sourceString = sourceString.replace(new RegExp(`[${groupseperator}]`, 'g'), ''); //Step 3: Replace decimal seperator with.dot //Decimal Seperator will only replace from the last occurance sourceString = sourceString.replace(new RegExp(`${decimalSeperator}([^${decimalSeperator}]*)$`), '.$1'); if (negativeNumber) { sourceString = '-' + sourceString; } //console.log(sourceString); //console.log(Number(sourceString)); return Number(sourceString); }

如果您參考下面的代碼場景失敗。

console.log('-1,234.567' + ' VS '+ formatNumber('-1,234.567',',','.'));

它以正數返回

negRegexp是錯誤的。 它匹配-在最后,但不是開始。

在正則表達式中為每個條件使用單獨的替代項。

 var negRegexp = /^-|-$|^\(.*\)$/; console.log(negRegexp.test('-123.55')); // Negative True console.log(negRegexp.test('123.55')); // Negative False console.log(negRegexp.test('(123.55)')); // Negative True console.log(negRegexp.test("1'234,567-")); // Negative True

第一個替代匹配-在開頭,第二個匹配-在結尾,第三個匹配(在開頭和)在結尾。

不需要g標志,因為您只匹配一個數字。

暫無
暫無

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

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