javascript - 防止计算字段出现多个小数点

标签 javascript regex

我有一个 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"/>

我想增强我的代码,限制用户在同一数字中输入多个小数(如下所示),同时仍然允许在计算字符串中输入多个小数(如下所示):

避免这种情况 -

enter image description here

但是请允许 -

enter image description here

我研究了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/

相关文章:

jquery - 突出显示 jQuery.autocomplete 的多个关键字

javascript - 像弹出窗口一样的灯箱

javascript - Typescript - 从我的函数中删除样板文件

javascript - 悬停时在图像周围显示 SVG

xml - XPath 查询(带有一些简单的正则表达式限制)

ruby - 正则表达式查找直到字符?

php - 使正则表达式不捕获 OR 捕获组

javascript - 当用户单击列表中的项目时如何控制折叠

javascript - Chai - 断言数组中的所有元素都等于给定值

java - 正则表达式匹配文件版本模式