我有一个 JavaScript 计算器,它使用以下代码来处理计算输入字段中的小数点(也在下面):
$('#button-dot').click(function() {
var lastChar = $('#disp').val().slice(-1);
var firstChar = $('#disp').val().slice(0);
if ($('#disp').hasClass("result")) {
$('#disp').removeClass("result").val("");
addChar(this.form.display,'0' + '.');
}
else if (lastChar == '.'){
// DO NOTHING
}
else if (lastChar == '1' || lastChar == '2' || lastChar == '3' || lastChar == '4' || lastChar == '5' || lastChar == '6' || lastChar == '7' || lastChar == '8' || lastChar == '9' || lastChar == '0' && firstChar != '0'){
addChar(this.form.display,'.');
}
else if (firstChar == '0'){
addChar(this.form.display,'0' + '.');
}
else {
addChar(this.form.display,'0' + '.');
}
$('#disp').removeClass("result");
});
其中 addChar
函数由以下方式给出:
function addChar(input, character) {
if (input.value == null || input.value == "0" ) {
input.value = character
}
else {
input.value += character
}
};
和输入字段:
<INPUT NAME="display" ID="disp" VALUE="0" SIZE="28" MAXLENGTH="25"/>
我想增强我的代码,限制用户在同一数字中输入多个小数(如下所示),同时仍然允许在计算字符串中输入多个小数(如下所示):
避免这种情况 -
但是请允许 -
我研究了regex
,因为我知道我的问题的解决方案可能会以某种方式涉及它,但我不确定如何实现它(我的 JavaScript 技能仍在进步!)。
我还考虑过用任何操作数(-,+,/,*,%
)分割字符串并检查结果数组的每个元素的小数点,但我在想这可能有点乱。
有什么想法吗?
最佳答案
您可以使用单个正则表达式轻松完成此操作:
^(?:(?:\d+(?:\.\d*)?|\.\d+)(?:[-+/*%]|$))+$
说明
^ # Begin of string
(?: # Group
(?: # A number
\d+
(?: \. \d* )?
| \. \d+
)
(?:
[-+/*%] # Operator
| # or,
$ # EOS
)
)+ # End group, do 1 to many times
$ # End of string
关于javascript - 防止计算字段出现多个小数点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35027346/