如何为输入字段提供格式?

时间:2013-07-31 15:19:34

标签: javascript html

每次用户按下按钮时,我希望每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)">

4 个答案:

答案 0 :(得分:1)

首先,你的正则表达式后你缺少一个分号。其次,您必须添加g修饰符才能找到所有匹配项,而不是在第一个匹配项处停止。另外,将.replace()的结果分配给变量,甚至是str本身。

str = str.replace(/(.{3})/g,"$1.");

这是因为在Javascript中字符串为immutable :这意味着所有String方法实际上并未更改内容字符串,而是返回新的修改后的字符串。

最后一个警告:你会注意到,当你添加点时,这个正则表达式将不再起作用,因为你将在点之间添加点。

你必须避免计算字符串中的点数。您可以通过在执行Regex之前重新处理变量来完成此操作;这一行:

str = str.split('.').join('');

Working example

答案 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;
}