2013-08-23 3 views
14

Я использовал эту функцию, чтобы проверить, является ли значение число:Разбор числа с запятой десятичного разделителя в JavaScript

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

Моя программа должна работать с немецкими ценностями. Мы используем запятую как десятичный разделитель вместо точки, поэтому эта функция не работает.

Я пытался сделать это:

n.replace(",",".") 

Но это также не похоже на работу. Точная функция Я пытался использовать это:

function isNumber(n) { 
    n=n.replace(",","."); 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

номер выглядит следующим образом 9.000,28 вместо обычного 9,000.28, если мое заявление не было достаточно ясно.

+2

Являются re '.' когда число больше 999? –

+2

Имейте в виду, что 'replace' * возвращает * новую строку. –

+1

Пожалуйста, разместите полный код с помощью 'replace'. Этого должно быть достаточно, поэтому должно быть что-то еще не так. –

ответ

16

Вы должны сначала заменить (удалить) точки в сепараторе тысяч, то заботиться о десятичной:

function isNumber(n) { 
    'use strict'; 
    n = n.replace(/\./g, '').replace(',', '.'); 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 
+0

это похоже на работу – Chaos

+0

Сбой с '111.222.3333,44'. [Демонстрация] (http://jsfiddle.net/Z8nAX/1/). '.replace' заменяет только первое совпадение, если у вас нет глобального регулярного выражения. * edit: whoops испортил строку ввода * – FakeRainBrigand

+0

@FakeRainBrigand Спасибо, я обновил свой код .. не очень хорошо с регулярными выражениями, похоже ли это на вас? –

12
var number = parseFloat(obj.value.replace(",","")); 

Вы, вероятно, также хотят, чтобы это пойти другим путем .. .

obj.value = number.toLocaleString('en-US', {minimumFractionDigits: 2}); 
+1

Это лучший способ! Благодарю. – Raugaral

1

Попробуйте

function isNumber(n) { 
    n=n.replace(/,/, ''); 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 
Смежные вопросы