每次用户按下按钮时,我希望每3个字符添加一个点,例如:
123
123.456
12.345.678
我希望每次按下按键都会发生这种情况,这就是我所拥有但没有运气......
function format_num(input) {
str = input.value;
str.replace(/(.{3})/,'$1.')
input.value = str;
}
<input type="text" name="num" id="num" onKeyPress="format_num(this)">
答案 0 :(得分:1)
首先,你的正则表达式后你缺少一个分号。其次,您必须添加g
修饰符才能找到所有匹配项,而不是在第一个匹配项处停止。另外,将.replace()
的结果分配给变量,甚至是str
本身。
str = str.replace(/(.{3})/g,"$1.");
这是因为在Javascript中字符串为immutable :这意味着所有String
方法实际上并未更改内容字符串,而是返回新的修改后的字符串。
最后一个警告:你会注意到,当你添加点时,这个正则表达式将不再起作用,因为你将在点之间添加点。
你必须避免计算字符串中的点数。您可以通过在执行Regex之前重新处理变量来完成此操作;这一行:
str = str.split('.').join('');
答案 1 :(得分:0)
这是我发布过的最恐怖,最难以理解的答案,但无论如何,它确实有效。
var num = 12345678;
var formatted = num.toString().replace(/./g, function(num) { return num+'|'; }).split('|').reverse().join('').replace(/\d{3}/g, function(nums) { return nums+'.'; }).replace(/./g, function(num) { return num+'|'; }).split('|').reverse().join('').replace(/^\./, '');
生成12.345.678
答案 2 :(得分:0)
您必须从右向左扫描。更具可读性(与Utkanos相比)的解决方案是
function format_num(input) {
var inStr = input.value.replace(/\./, '');
var outStr = '';
for (var count=0, i=inStr.length-1; i>=0; i--, count++ ) {
if ( count && count % 3 == 0 ) outStr = '.' + outStr;
outStr = inStr.charAt(i) + outStr;
}
input.value = outStr;
}
答案 3 :(得分:0)
我发现这个脚本完美无缺!!我的答案有些问题所以我看了看并想出了这件作品......不管怎样,谢谢!!
function formatNumber( originalValue ){
originalValue = ( originalValue != null ? originalValue.toString() : "0" );
var nStr = originalValue.replace( /\./g, "" );
var jj=0;
var leftNumbers = 0;
var x = nStr.split(',');
var x1 = x[ 0 ];
var x2 = x.length > 1 ? ',' + x[ 1 ] : '';
var rgx = /(\d+)(\d{3})/;
while( rgx.test( x1 ) ){
x1 = x1.replace( rgx, '$1' + '.' + '$2');
}
nStr = x1 + x2;
for( jj=0; leftNumbers>0; jj++ ){
if( /[0-9]/.test( nStr.toString().substring( jj, ( jj + 1 ) ) ) )
leftNumbers--;
}
if( originalValue == nStr )
return originalValue;
return nStr;
}