对于以数字开头的任何内容,isNaN()都返回false,即使其中包含字母

时间:2018-11-07 18:52:18

标签: javascript jquery html

我编写的程序应该在一个选定的数字系统中采用一个数字,然后在另一个选定的系统中将其转换为具有相同值的数字。它更大,但我给了您一个简单的版本,其中包含您要与之转换的已选择系统。

如果输入的数字不是正确的数字,应该给您一条错误消息(Please enter a proper ${fromSystem[1]} number)。但是,如果数字以数字开头,而后又包含字母,则认为它是数字。该数字之后的所有内容都将被忽略(例如:对于25ad3,它将转换25并忽略其后的所有内容)。您可以对其进行测试(此代码具有功能)。

有人知道如何解决这个问题吗?

编辑:我刚刚添加了更多详细信息

fromSystem = [10, "decimal"]; // Decimal
toSystem = [2, "binary"]; // Binary

$("#convert").click(function() {
          var result;
          var inputValue = $("#inputBox").val();
          if (fromSystem === toSystem) {
            result = inputValue;
          } else {
            result = parseInt(inputValue, fromSystem[0]).toString(toSystem[0]);
          }
          if (isNaN(result) === true) {
            result = `Please enter a proper ${fromSystem[1]} number`;
          } else {
            result = result.toUpperCase();
          }
          $("#resultPara").html(result);
        })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="converterArea">
      <input id="inputBox" type="text" placeholder="">
      <button id="convert" type="button">Convert</button>
      <p id="resultPara"></p>
    </div>

2 个答案:

答案 0 :(得分:2)

由于isNaN的实现方式,这是理想的行为,请参见文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN#Description

我将首先使用regexp测试它是否仅包含数字,像这样:

fromSystem = [10, "decimal"]; // Decimal
toSystem = [2, "binary"]; // Binary

$("#convert").click(function() {
          var result;
          var inputValue = $("#inputBox").val();
          if (fromSystem === toSystem) {
            result = inputValue;
          } else {
            result = parseInt(inputValue, fromSystem[0]).toString(toSystem[0]);
          }
          if (inputValue.match(/[^0-9]/g)) {
            result = `Please enter a proper ${fromSystem[1]} number`;
          } else {
            result = result.toUpperCase();
          }
          $("#resultPara").html(result);
        })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="converterArea">
      <input id="inputBox" type="text" placeholder="">
      <button id="convert" type="button">Convert</button>
      <p id="resultPara"></p>
    </div>

答案 1 :(得分:1)

与@Lukasz所说的一样。解决此问题的另一种方法是使用+将字符串强制转换为数字,假设您始终以10为底引入一个数字

fromSystem = [10, "decimal"]; // Decimal
toSystem = [2, "binary"]; // Binary
$("#convert").click(function() {
          var result;
          var inputValue = $("#inputBox").val();
          if (fromSystem === toSystem) {
            result = inputValue;
          } else {
            result = (+inputValue).toString(toSystem[0]);
          }
          if (isNaN(result) === true) {
            result = `Please enter a proper decimal number`;
          } else {
            result = result.toUpperCase();
          }
          $("#resultPara").html(result);
        })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="converterArea">
      <input id="inputBox" type="text" placeholder="">
      <button id="convert" type="button">Convert</button>
      <p id="resultPara"></p>
    </div>