Skip to content

Commit 85beb18

Browse files
author
Joren Broekema
committed
fix(localize): use minus sign unicode instead of hypen-minus
1 parent 1ef9535 commit 85beb18

File tree

3 files changed

+18
-11
lines changed

3 files changed

+18
-11
lines changed

packages/localize/src/number/formatNumberToParts.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,14 @@ export function formatNumberToParts(number, options) {
2828
const formattedNumber = Intl.NumberFormat(computedLocale, options).format(parsedNumber);
2929
const regexSymbol = /[A-Z.,\s0-9]/;
3030
const regexCode = /[A-Z]/;
31-
const regexMinusSign = /[-]/;
31+
32+
/**
33+
* TODO: Preprocessor should convert other "dashes" unicodes to −
34+
* Then our regex should test for −
35+
* See also https://www.deque.com/blog/dont-screen-readers-read-whats-screen-part-1-punctuation-typographic-symbols/
36+
*/
37+
const regexMinusSign = /[-]/; // U+002D, Hyphen-Minus, - is what we test on for now, since most keyboards give you this for dash
38+
3239
const regexNum = /[0-9]/;
3340
const regexSeparator = /[.,]/;
3441
const regexSpace = /[\s]/;
@@ -38,7 +45,7 @@ export function formatNumberToParts(number, options) {
3845
for (let i = 0; i < formattedNumber.length; i += 1) {
3946
// detect minusSign
4047
if (regexMinusSign.test(formattedNumber[i])) {
41-
formattedParts.push({ type: 'minusSign', value: formattedNumber[i] });
48+
formattedParts.push({ type: 'minusSign', value: '−' /* U+2212, 'Minus-Sign', &minus; */ });
4249
}
4350
// detect numbers
4451
if (regexNum.test(formattedNumber[i])) {

packages/localize/test/number/formatNumber.test.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,32 +27,32 @@ describe('formatNumber', () => {
2727
expect(formatNumber(123456.789, currencySymbol('USD'))).to.equal('$123,456.79');
2828
});
2929

30-
it('uses minus (and not dash) to indicate negative numbers ', () => {
31-
expect(formatNumber(-12, { style: 'decimal', maximumFractionDigits: 0 })).to.equal('-12');
30+
it('uses minus U+2212 (and not dash) to indicate negative numbers ', () => {
31+
expect(formatNumber(-12, { style: 'decimal', maximumFractionDigits: 0 })).to.equal('12');
3232
});
3333

3434
it('rounds (negative) numbers e.g. `roundMode: round`', () => {
3535
expect(formatNumber(12.4, { roundMode: 'round' })).to.equal('12');
3636
expect(formatNumber(12.6, { roundMode: 'round' })).to.equal('13');
3737

38-
expect(formatNumber(-12.4, { roundMode: 'round' })).to.equal('-12');
39-
expect(formatNumber(-12.6, { roundMode: 'round' })).to.equal('-13');
38+
expect(formatNumber(-12.4, { roundMode: 'round' })).to.equal('12');
39+
expect(formatNumber(-12.6, { roundMode: 'round' })).to.equal('13');
4040
});
4141

4242
it("rounds (negative) numbers up when `roundMode: 'ceiling'`", () => {
4343
expect(formatNumber(12.4, { roundMode: 'ceiling' })).to.equal('13');
4444
expect(formatNumber(12.6, { roundMode: 'ceiling' })).to.equal('13');
4545

46-
expect(formatNumber(-12.4, { roundMode: 'ceiling' })).to.equal('-12');
47-
expect(formatNumber(-12.6, { roundMode: 'ceiling' })).to.equal('-12');
46+
expect(formatNumber(-12.4, { roundMode: 'ceiling' })).to.equal('12');
47+
expect(formatNumber(-12.6, { roundMode: 'ceiling' })).to.equal('12');
4848
});
4949

5050
it('rounds (negative) numbers down when `roundMode: floor`', () => {
5151
expect(formatNumber(12.4, { roundMode: 'floor' })).to.equal('12');
5252
expect(formatNumber(12.6, { roundMode: 'floor' })).to.equal('12');
5353

54-
expect(formatNumber(-12.4, { roundMode: 'floor' })).to.equal('-13');
55-
expect(formatNumber(-12.6, { roundMode: 'floor' })).to.equal('-13');
54+
expect(formatNumber(-12.4, { roundMode: 'floor' })).to.equal('13');
55+
expect(formatNumber(-12.6, { roundMode: 'floor' })).to.equal('13');
5656
});
5757

5858
it('returns empty string when NaN', () => {

packages/localize/test/number/formatNumberToParts.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const i = v => ({ type: 'integer', value: v });
1010
const f = v => ({ type: 'fraction', value: v });
1111
const g = v => ({ type: 'group', value: v });
1212
const l = v => ({ type: 'literal', value: v });
13-
const m = { type: 'minusSign', value: '-' };
13+
const m = { type: 'minusSign', value: '' };
1414

1515
const stringifyParts = parts => parts.map(part => part.value).join('');
1616

0 commit comments

Comments
 (0)