2014-11-07 2 views
1

자바 스크립트에서 문자열에서 가장 긴 숫자를 찾아 부동 소수점 값으로 변환하는 함수를 만들려고합니다. 그러나 ff333sds22442 같은 것을 입력하면 22442을 출력 할 때 가장 긴 숫자로 "333"을 출력합니다.Javascript, 문자열에서 가장 큰 숫자 시퀀스 찾기

<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; 
} 

나는 왜 이런 일을하는지 모르겠다. 나는 누군가가 나에게 설명 할 수 있기를 바랬다.

+0

:

parseFloatdocumentation는 함수의 버그를 수정하는 데 사용할 수있는 엄격한 구문 분석 기능을 포함 * 파싱 된 * float의 길이가 아닌 부분 문자열의 길이를 비교하고 있습니다. 따라서 결과는 항상 원래 문자열이됩니다 (가장 길기 때문에). 그리고 그것에 대한'parseFloat'는 발견 한 첫 번째 숫자를 줄 것입니다 (즉'333') –

+0

이것을 사용하여 정렬하는 더 효율적인 방법이 있습니까? –

답변

0

이 방법이 제대로 작동하지 않는 이유는 parseFloat(inputSub)NaN인지 테스트하기 위해서입니다. parseFloat('333sds')NaN이 아니라 333을 반환하므로이 방법이 작동하지 않습니다. 당신은`inputSub.length`을 비교할 때, 시작하지 않는 매우 효율적되는 것을 제외하고

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 
+0

아! 잡았다! 무리 감사. –

+0

문제 없습니다. 방금 문제를 해결하는 데 도움이 될 수있는 답변을 편집에 추가했으며 정규식을 사용하지 않은 경우 정규식을 소개합니다. – devuxer

+0

아직 정규식이 없습니다. 나는 그곳에있는 if 문에 대해 이야기하지 않기를 희망합니다. 왜냐하면 그것은 불쾌 해 보이기 때문에 언제든지 다시 만나고 싶지 않기 때문입니다. –

관련 문제