我有以下代码,应删除某些字符,包括字符串中的空格。
parseFloat(value.replace(/\s+/g,"").replace(/,/g, ''))
所以,如果我输入' 1,000,002'或者' 1 002 002'输出是1000002,这是正确的。
如果输入为1,000,002.00'输出是1000002,这也是正确的,但是如果输入是'000 002,00'我回到100000200,这是不正确的。有人可以指出我应该如何修改正则表达式部分吗?
答案 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*
删除所有空格,,*
替换所有,