在数字之间添加空格
Posted
技术标签:
【中文标题】在数字之间添加空格【英文标题】:Adding space between numbers 【发布时间】:2013-05-14 06:36:08 【问题描述】:我正在尝试输入数字。我已经做了,所以我的文本框只接受通过此代码的数字:
function isNumber(evt)
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
但是现在问题来了,当用户输入他们的号码时,我将如何创建空格,就像 iPhone 的电话间隔一样,但是对于数字,例如,如果他们输入:1000,它将变成 1000;
1
10
100
1 000
10 000
100 000
1 000 000
10 000 000
100 000 000
1 000 000 000
等等……
我尝试从右侧读取每 3 个字符的输入并添加一个空格。但是我的方法效率低下,当我将文本框中的值从 1000 更改为 1 000 时,它会出于某种原因选择它,然后按下任何按键,删除整个内容。
如果您知道如何执行此操作,请避免使用 jQuery 等 javascript 插件。谢谢。
【问题讨论】:
一句警告:这真的很难做到。如果我在输入中间用鼠标单击并添加一个数字会怎样?我将光标移动到某处并点击粘贴?它与撤消和重做的效果如何?处理键盘输入不仅仅是接受正确键入的字符序列。 【参考方案1】:对于整数使用
function numberWithSpaces(x)
return x.toString().replace(/\B(?=(\d3)+(?!\d))/g, " ");
对于浮点数,您可以使用
function numberWithSpaces(x)
var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d3)+(?!\d))/g, " ");
return parts.join(".");
这是一个简单的正则表达式工作。 https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions
如果您不确定数字是整数还是浮点数,请使用第二个...
【讨论】:
很好的解决方案!中文数字格式只需将 3 替换为 4 即可。 很高兴看到对模式的解释。【参考方案2】:最简单的方法:
1
var num = 1234567890,
result = num.toLocaleString() ;// result will equal to "1 234 567 890"
2
var num = 1234567.890,
result = num.toLocaleString() + num.toString().slice(num.toString().indexOf('.')) // will equal to 1 234 567.890
3
var num = 1234567.890123,
result = Number(num.toFixed(0)).toLocaleString() + '.' + Number(num.toString().slice(num.toString().indexOf('.')+1)).toLocaleString()
//will equal to 1 234 567.890 123
4
如果你想要 ',' 而不是 ' ':
var num = 1234567.890123,
result = Number(num.toFixed(0)).toLocaleString().split(/\s/).join(',') + '.' + Number(num.toString().slice(num.toString().indexOf('.')+1)).toLocaleString()
//will equal to 1,234,567.890 123
如果不起作用,请将参数设置为:“toLocaleString('ru-RU')” 参数“en-EN”,将用 ',' 分割数字,而不是 ' '
【讨论】:
很好的解决方案! 第一个示例仅在您位于同一区域时为您提供空格。 'en-US' 将显示一个逗号,它还取决于浏览器和用户设置。这不是一个万无一失的解决方案。 ***.com/a/16157942/982454【参考方案3】:此函数在输入中运行良好:
const formatAndVerifyNumericValue = (value, callback) =>
const reg = new RegExp('^[0-9]+$');
let newValue = value.replace(/\s/g, '');
if (reg.test(newValue))
newValue = newValue.toString().replace(/\B(?<!\.\d*)(?=(\d3)+.
(?!\d))/g, ' ');
return callback(newValue);
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于在数字之间添加空格的主要内容,如果未能解决你的问题,请参考以下文章