У меня есть функция Javascript, которую я использую, чтобы прокрутить кучу входов на странице и преобразовать их в тысячную совместимую систему запятой. Короче говоря, независимо от того, что пользователь вводит в поле, они получат дружественный номер с тысячами разделов.
Input: 5000
Return: 5,000
Здесь, как функция ломается
function add_commas()
{
$('.field-group .field input[type=text]').each(function()
{
// format number
$(this).val(function(index, value) {
return value
.replace(/\D/g, "")
.replace(/\B(?=(\d{3})+(?!\d))/g, ",")
;
});
});
}
Все работает правильно, за исключением одного. Вот еще один пример данных, переданных и возвращаемых:
Input: 9.5
Return: 95
Обратите внимание на целое число.
Мне интересно, есть ли способ игнорировать или оставить десятичное число, если у него его нет, но сохраните его и относитесь к нему с уважением, если он есть. Здесь ввод/вывод, на который я надеюсь:
Input: 5000
Return: 5,000
Input: 9.5
Return: 9.5
Input: 1000.50
Return: 1,000.50
Надеюсь, это было ясно, но, пожалуйста, дайте мне знать, если вам потребуется дополнительная информация об этой проблеме. Спасибо!
Измените первую замену, потому что она удаляет точку в строке
.replace(/[^0-9\.]/g, "")
На самом деле регулярные выражения не подходят для этой проблемы, потому что не каждая культура использует запятые как разделители тысяч и периоды для разделителя оснований. Вы должны использовать toLocaleString
. В узле, например:
> (52342.214).toLocaleString()
'52,342.214'
> (52342.214).toLocaleString('de-DE')
'52.342,214'
> (52342.214).toLocaleString('ar-EG')
'٥٢٬٣٤٢٫٢١٤'
> (5234289877.21).toLocaleString('en-US')
'5,234,289,877.21'
Таким образом, вам не нужно писать свой собственный код, подверженный ошибкам, и вы можете локализовать его для разных культур. Эта работа уже сделана для вас!
Вы также получаете нулевую часть своего вопроса бесплатно! Обратите внимание:
> (38209).toLocaleString()
'38,209'
> (38209.0000).toLocaleString()
'38,209'
Опять же, все бесплатно!
(value | 0).toLocaleString()
.replace(/\D/g, "")
это.replace(/\D/g, "")
должно быть.replace(/[^0-9\.]/g, "")
toLocaleString