Javascript 如何为输入字段指定格式?

Javascript 如何为输入字段指定格式?,javascript,html,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="form

每次用户按下按钮时,我希望每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)">
函数格式\u num(输入){
str=输入值;
str.replace(/(.{3})/,“$1.”)
input.value=str;
}

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

str = str.replace(/(.{3})/g,"$1.");
这是因为在Javascript中,字符串是:这意味着所有的
字符串
方法实际上不会更改内容字符串,而是返回一个新的修改字符串

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

你必须避免数数绳子上的点。在执行正则表达式之前,可以通过修改变量来实现这一点;这句话的意思是:

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

这是我发布过的最可怕、最不可读的答案,但不管对多少人来说,它都是有效的

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

您必须从右向左扫描。一个更具可读性(与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;
}

我发现这个脚本非常好用!!我有一些问题的答案,所以我看了,并提出了这件作品…无论如何,谢谢

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

是一个展示javascript代码的非常好的平台。一个问题是,replace调用将只替换第一次出现的三个字符。如果在第二个斜杠后添加字母g,它将重复替换(如果有3个字符的倍数,则也会在末尾增加一个点)。问题的标题与问题的文本不对应。还不清楚您为什么要这样做,即您可能解决了错误的问题。通过自动插入字符来干扰用户输入通常是个坏主意。只是好奇:你能修正负数的一行吗?是的。只需将第一个匹配中的
\d
更改为匹配任何字符(即
-