2015-08-20 5 views
-1

У меня есть следующий код, который должен удалить определенные символы, включая пробел из строки.удаление символов из строки

parseFloat(value.replace(/\s+/g,"").replace(/,/g, '')) 

Так что, если я ввожу «1,000,002» или «1 000 002», выход 1000002, что является правильным.

Если вход «1,000,002,00», выход 1000002, и это также верно, однако, если вход «1 000 002,00», я возвращаю 100000200, что неверно. Может кто-нибудь, пожалуйста, укажите мне, как мне изменить часть регулярного выражения?

+4

Вы пытаетесь разобрать номера с различными десятичные разделители и разделители тысяч? Это по своей сути неоднозначно: «5000» означает 5 или 5000? – Thomas

+0

Я думаю, что это что-то трудное и склонное к ошибкам делать через регулярное выражение, вы уже считали это: http://openexchangerates.github.io/accounting.js/? –

+0

Можно ли считать число цифр в десятичной части всегда меньше 3? –

ответ

-1

Вы можете использовать parseFloat(string.replace(/,*\s*/g,''));

\s* удаляет все пробелы и ,* заменяет все ,

0

Это звучит, как вы пытаетесь поддерживать два различных локалей с тем же кодом, одну локаль, которая использует , как тысячи разделителей и другой, который использует , в качестве десятичной точки. Опоры, которые используют , в качестве десятичной точки, часто используют . в качестве разделителя тысяч, поэтому вам нужно идти дальше.

Если вы можете рассчитывать на вход, имеющий разделители в нужном месте и если вы можете положиться только имея две цифры справа от десятичной, вы можете сделать это (многословно для ясности) :

// Remove spaces 
value = value.replace(/ +/g, ''); 

// Remove thousands separators (a . or , followed by three digits) 
value = value.replace(/[,.](\d{3})/g, '$1'); 

// Normalize decimal point 
value = value.replace(/,/g, '.'); 

// Parse 
value = parseFloat(value); 

... но это очень большие предположения. Как только кто-то входит 5,001, чтобы обозначить «пять и 1 тысячную», вы набиты; вы предположите, что это 5001. Вместо я бы рекомендовал пользователю выбрать стиль ввода, а затем применить правила, специфичные для этого стиля.

Живой пример:

// PLEASE NOTE THE REALLY BIG ASSUMPTIONS LISTED IN THE ANSWER 
 
// AND THE SUGGESTION *NOT* TO DO THIS 
 
function parseInput(value) { 
 
    // Remove spaces 
 
    value = value.replace(/ +/g, ''); 
 

 
    // Remove thousands separators 
 
    value = value.replace(/[,.](\d{3})/g, '$1'); 
 

 
    // Normalize decimal point 
 
    value = value.replace(/,/g, '.'); 
 

 
    // Parse 
 
    value = parseFloat(value); 
 
    
 
    return value; 
 
} 
 

 
function test(value) { 
 
    snippet.log(value + " => " + parseInput(value)); 
 
} 
 

 
test("1,000,020.10"); 
 
test("1.000.020,10"); 
 
test("1 000 020.10"); 
 
test("1 000 020,10"); 
 
test("1000020,10"); 
 

 
test("1,000,020.10"); 
 

 
test("1.000.020,10"); 
 
test("1000020,10"); 
 

 
test("1000020,00"); 
 
test("1000020,00"); 
 
test("1000020");
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

Смежные вопросы