从字符串中删除字符

时间:2015-08-20 10:06:53

标签: javascript regex

我有以下代码,应删除某些字符,包括字符串中的空格。

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

所以,如果我输入' 1,000,002'或者' 1 002 002'输出是1000002,这是正确的。

如果输入为1,000,002.00'输出是1000002,这也是正确的,但是如果输入是'000 002,00'我回到100000200,这是不正确的。有人可以指出我应该如何修改正则表达式部分吗?

2 个答案:

答案 0 :(得分:0)

听起来您正在尝试使用相同的代码支持两个不同的区域设置,一个区域设置使用,作为千位分隔符,另一个区域设置使用,作为小数点。使用,作为小数点的那些经常使用.作为千位分隔符,因此您需要更进一步。

如果你可以依赖在正确位置有分隔符的输入,而 if 你可以依赖只有小数点右边的两位数字,你可以做到这一点(为了清晰而啰嗦):

// 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表示“五和一千分之一”,你就会被塞满;你会假设它是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>

答案 1 :(得分:-1)

您可以使用parseFloat(string.replace(/,*\s*/g,''));

\s*删除所有空格,,*替换所有,