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