1

在 Javascript 中,我正在尝试创建一个函数,该函数将在字符串中找到最长的数字并将其转换为浮点值。但是,当我输入类似的内容时ff333sds22442,它会在应该输出的时候输出“333”作为最长的数字22442

<input type="text" id="numberInput"></input>
<button onclick="findNumber()"> Find Number </button>
<button onclick="makeSubstring()"> Make Substring </button>
<p id="number"></p>

<script>

function findNumber() {
     var input = document.getElementById("numberInput").value;
     var longest = "";
     var result = "";
     var inputSub = "";

     for (var i = 0; i < input.length; i++) {
         for (var j = i + 1; j < input.length; j++) {

             inputSub = input.substring(i, j + 1);
             if (!isNaN(parseFloat(inputSub)) && inputSub.length > longest.length){
                longest = inputSub;
                result = inputSub;
             }
         }
     }

     result = parseFloat(result);
     document.getElementById("number").innerHTML = result;
}

我不确定它为什么会这样,我希望有人可以向我解释。

4

1 回答 1

0

这不能正常工作的原因是您正在测试是否parseFloat(inputSub)NaN. 这不起作用,因为parseFloat('333sds')将返回 333,而不是NaN.

文档包含parseFloat一个更严格的解析函数,您可以使用它来修复函数中的错误:

var filterFloat = function (value) {
    if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/
      .test(value))
      return Number(value);
  return NaN;
}

console.log(filterFloat('421'));               // 421
console.log(filterFloat('-421'));              // -421
console.log(filterFloat('+421'));              // 421
console.log(filterFloat('Infinity'));          // Infinity
console.log(filterFloat('1.61803398875'));     // 1.61803398875
console.log(filterFloat('421e+0'));            // NaN
console.log(filterFloat('421hop'));            // NaN
console.log(filterFloat('hop1.61803398875'));  // NaN
于 2014-11-07T02:37:40.230 回答