我使用此代码替换数字字符,当数字以0开头时,例如“ 000001111”或“ 0000000”,将替换0。“ 000001111”更改为“ 1111”,“ 0000000”更改为“ 0”。
但是当我输入一个小数时,想要这个。
例如,我输入“ 00012.340”,保持“ 12.34”,当我输入“ 00.00”时保持“ 0.0”,当我输入“ 000.0012”时保持“ 0.0012”。 如何修复我的代码的onkeyup?
我的代码:
<input id="text_target_value" maxlength="11" class="text-right number" type="text" onkeyup="value=value.replace(/[^\d]+|^0+(?!$)/g, '')" style="display: inline-block;">
答案 0 :(得分:2)
因此,您要修剪前导零,如果要在后面加上小数点或字符串的末尾,则保留一个前导零,和您要在其后修剪尾随零小数点。
您可以使用以下字符匹配非数字,非句点字符:
[^\d.]
您可以将不希望有的前导零与匹配
^0+(?=0(\.|$)|\d)
换句话说,匹配前导零,后跟0.
或0
和字符串的末尾,或其他某个数字。
以上两种模式都可以用空字符串替换。
然后,要修剪后缀的零,则必须捕获一组中的小数点和十进制数字,然后匹配尾随的零,然后替换第一个被捕获的组:
document.querySelector('#text_target_value').onkeyup = function() {
this.value = this.value
.replace(/[^\d.]+|^0+(?=0(\.|$)|\d)/g, '')
// Still need to trim trailing zeros after decimal point:
.replace(/(\.\d*[1-9])0+$/, '$1');
}
<input id="text_target_value" maxlength="11" class="text-right number" type="text">
可能更清楚地先替换非数字和非句点,并保持前导零的正则表达式分开:
this.value = this.value
// Replace anything that isn't a digit or a period:
.replace(/[^\d.]+/g, '')
// Replace undesirable leading zeros:
.replace(/^0+(?=0(\.|$)|\d)/g, '')
// Still need to trim trailing zeros after decimal point:
.replace(/(\.\d*[1-9])0+$/, '$1');
答案 1 :(得分:0)
您不需要多次调用replace()
方法。您可以一步一步完成:
value.replace(/^0*(?!\.)|(0)0*$/g, '$1');
正则表达式:
^0*(?!\.)|(0)0*$
这将匹配所有不立即跟在小数点后的前0
个和后所有0
个。然后尝试用$1
替换整个匹配项,当满足交替的第二面时,该匹配项具有一个值。