Javascript 如何为输入字段指定格式?
每次用户按下按钮时,我希望每3个字符添加一个点,例如: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
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
更改为匹配任何字符(即-
)