mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-08-28 08:55:07 +01:00
33 lines
862 B
TypeScript
33 lines
862 B
TypeScript
// Copyright 2026 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import { isNumber } from 'lodash';
|
|
import { unicodeNumber } from 'unicode-number';
|
|
import { getSegmenter } from './grapheme.std.ts';
|
|
|
|
const IS_ALL_DIGITS = /^\p{Nd}+$/u;
|
|
const DIGITS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
|
|
export function normalizePin(pin: string): string {
|
|
let result = pin.trim();
|
|
|
|
if (IS_ALL_DIGITS.test(result)) {
|
|
const segmenter = getSegmenter();
|
|
const segments = segmenter.segment(result);
|
|
|
|
let updated = '';
|
|
for (const segment of segments) {
|
|
const parsedValue = unicodeNumber(segment.segment);
|
|
if (isNumber(parsedValue) && DIGITS.includes(parsedValue)) {
|
|
updated += parsedValue.toString();
|
|
} else {
|
|
updated += segment.segment;
|
|
}
|
|
}
|
|
|
|
result = updated;
|
|
}
|
|
|
|
return result.normalize('NFKD');
|
|
}
|