У меня есть числовой ввод, который отображает «числовой» ввод текста в React Native.
Во многих регионах это вызывает цифровую панель с запятой для десятичного разделения вместо точки. Это приводит к вводу типа «100,1» вместо «100,1».
Number(value)
JavaScript работает только с десятичными точками, а не с запятыми. Как я могу определить текущий формат пользователя, чтобы правильно проанализировать ввод?
Эта функция будет разобрать десятичным вводом на основе текущей локали, используя реакцию-нативную-локализацию:
import { getNumberFormatSettings } from "react-native-localize";
export function parseLocaleNumber(stringNumber: string) {
const { decimalSeparator, groupingSeparator } = getNumberFormatSettings();
return Number(
stringNumber
.replace(new RegExp(`\\${groupingSeparator}`, "g"), "")
.replace(new RegExp(`\\${decimalSeparator}`), "."),
);
}
На всякий случай эта дополнительная функция обеспечивает функциональность toFixed в зависимости от локали:
export function toFixedLocale(value: number, numDigits: number) {
const standardFixedString = value.toFixed(numDigits);
const { decimalSeparator } = getNumberFormatSettings();
if (decimalSeparator === ",") {
return standardFixedString.replace(".", ",");
} else {
return standardFixedString; // Locale matches JavaScript default
}
}
(parseLocaleNumber на основе https://stackoverflow.com/a/42213804/152711)