提问人:Rewind 提问时间:10/9/2023 最后编辑:pilchardRewind 更新时间:10/10/2023 访问量:78
如果需要,使用 RegExp 在开头只得到一个“-”
Using RegExp to get just one "-" at the start if needed
问:
我想要一个数字,最小值为 -1,并且开始时只输入一个负数。
这就是我目前所拥有的。-1 最小值不起作用。小数点后一点效果很好。单个负号效果很好。但是我不能强迫否定只出现在开始时。
如果需要,我怎样才能只在开始时得到否定? 我怎样才能让 -1 的最小值工作?
<input type="text" id="mynumber" min="-1"
oninput="this.value = this.value.replace(/[^0-9.-]/g, '').replace(/(\..*)\./g, '$1').replace(/(\--*)\-/g, '$1');" />
答:
1赞
The fourth bird
10/10/2023
#1
您可以对前 2 次调用使用 1 模式来替换:
[^0-9.\n-]+|^-(?:1\.0*[1-9]|[2-9]|1\d+).*|(?!^)-
该模式匹配:
[^0-9.\n-]
匹配 1+ 字符未在字符类中列出|
或^-0*
在字符串的开头匹配,后跟可选的零-
(?:1\.0*[1-9]|[2-9]|1\d+)
匹配可选的零和数字 1-9,或匹配数字 2-9 或匹配大于 10 的数字1.
.*
匹配行的其余部分|
或(?!^)-
在字符串的开头匹配 not-
观看正则表达式演示。
保留最后一次调用以删除第二次出现的点。
function handleInput() {
this.value = this.value.replace(/[^0-9.\n-]+|^-0*(?:1\.0*[1-9]|[2-9]|1\d+).*|(?!^)-/g, '').replace(/(\..*)\./g, '$1');
}
const inp = document.getElementById("mynumber");
if (inp) {
inp.addEventListener("input", handleInput);
}
<input type="text" id="mynumber" />
如果 JavaScript 环境支持后视断言,则可以使用单个替换:
function handleInput() {
this.value = this.value.replace(/[^0-9.\n-]+|^-0*(?:1\.0*[1-9]|[2-9]|1\d+).*|(?!^)-|(?<!^[^\n.]*)\./g, '');
}
const inp = document.getElementById("mynumber");
if (inp) {
inp.addEventListener("input", handleInput);
}
<input type="text" id="mynumber" />
1赞
MikeB
10/10/2023
#2
按照你尝试的方式做事可能有充分的理由,但我会让 JS 为你做繁重的工作,比如:
let thisValue = document.getElementById("mynumber");
if( thisValue < -1){
// Good
}else{
// Bad - do something here
}
(我也会稍微充实一下,以涵盖非数字输入的可能性,但话又说回来,我一开始就不会使用“数字”输入类型!
评论
text
number
.replace(/^(.+)-/g, '$1')
^
addEventListener