2011-12-16 5 views
0

나는 자바 스크립트를 배우는 데 도움이되는 간단한 팁 계산기를 만들고 있습니다. 내가 해결할 수없는 문제는 "잘못된 입력"을 보완하는 방법입니다.초보자 잘못된 입력에 대한 자바 스크립트 질문

아래 코드에서 사용자가 숫자 입력 금액을 달러 기호 $으로 시작하는 경우 결과는 NAN입니다.

function tipAmount(){ 
var dinner=prompt("How much was dinner?"); 
result = dinner*.10; 

alert("Your tip is " +"$"+result); 

} 

어떻게 수정합니까?

+2

어떻게 처리할까요? –

+0

내 질문은 무엇이 가능한지에 대한 옵션을 모색하는 방법으로 두 배로 증가하고 있습니다. "가능한 한 간단하게"이외에는 간단히 알지 못합니다. – user1102740

+0

오 기다려주십시오. 무슨 뜻인지 알 겠어. $를 무시하고 싶습니다! – user1102740

답변

1

가장 간단한 방법은 입력을 부동으로 구문 분석하고 NaN이 반환되는지 확인하는 것입니다.

if (isNaN(parseFloat(dinner))) 
    alert("Bad Input") 

45.2WWW은 45.2를 반환하므로 위의 내용을 전달합니다. 당신이 입력 한 사용자가 정확히 숫자가 무엇인지 확인하려면

, 당신은 이런 식으로 뭔가를 할 수 :

var str = '3.445'; 
var num = parseFloat(str); 

if (isNaN(num) || str.length !== num.toString().length) 
    alert("Bad Input"); 
1

사용자의 요구에 따라 부동 소수점 또는 정수로 입력을 구문 분석하려고 :

그들이없는을 구문 분석 할 것인지 여부를
var dinner = parseFloat(prompt("How much was dinner?")); 

또는

var dinner = parseInt(prompt("How much was dinner?")); 

이 기능

0 반환 값이 숫자 인 경우 숫자

0

등의 입력은 그냥 확인 - 자바 스크립트의 때는 isNaN :

if (isNaN(dinner)) { 
    alert('Bad number, bub.'); 
    return; 
} 
2

당신은 정규 표현식으로 숫자 값을 구문 분석을 시도 할 수 있습니다 :

var match = dinner.match(/\d+\.?\d*/); // parse with a regular expression 

if(!match) { // not able to parse 
    alert("wrong"); 
} 

var price = +match[0]; // convert to a number 

result = price * .10; 

정규 표현식 /\d+\.?\d*/ 의미 : 하나 이상의 자릿수 및 가능하면 다른 자릿수의 점. 즉, 예를 들어 dinner"$1.23"이고, price1.23입니다. 동일한 것은 "$ 1.23" 또는 "1.23 dollar" 등입니다. 숫자는 정규 표현식으로 정의 된 패턴으로 분석됩니다.

+1

+1 정규 표현식 –

+0

에 대해서는'/ \ d * \.? \ d * /'가되어서는 안됩니다.5' –

+0

@Adam Rackis : 당신은 정확 합니다만, 모든 것이 선택적이고 아무것도 일치하지 않습니다. (처음에는 "" "가 이미 일치 할 것입니다). – pimvdb

0

아니면 사용자가 모두 입력 할 수있게하려면, - 처음에 $로 단지 숫자 나 금액을 먼저 문자를 확인할 수 있습니다

if(dinner.charAt(0) == '$') 
{ 
    dinner = dinner.substring(1); 
} 

이 방법을 할 때마다 사용자 유형 $, 귀하의 애플 리케이션은 그냥 그것을 제거합니다. 그들은 정상적인 번호를 입력하면 그것은

1

경고를 사용하는 접근 방식을 감안할 때, 다음이 작동합니다 ... 당신을 위해 팁을 계산합니다 :

function tipAmount() { 
    var dinner=prompt("How much was dinner?"); 

    //convert "dinner" to a number, stripping out any non numeric data 
    dinner = Number(dinner.replace(/[^0-9\.]+/g,"")); 

    //any unknown data will convert to 0 
    if(dinner <= 0) { 
     alert("Please enter a valid amount"); 
     return false; 
    } 
    var result = dinner*.10; 
    alert("Your tip is " +"$"+result); 

    return true; 
} 

더 팁을주세요!

+0

Nitpicking하지만'\ d' (digit)로 '0-9'을 대체 할 수 있으며'.'는 이스케이프 할 필요가 없다. – pimvdb

+0

@pimvdb 참으로. 그는 당신의 답에서 주어진 정규 표현식으로 행복하게 대체 할 수 있습니다. 감사. – Dave

+0

문자열을 숫자로 변환하고 다른 문자를 제거하는 것은 내가 찾고있는 것입니다. 달성하기위한 구문을 이해하지 못하는 이유는 무엇인지 이해하기가 몹시 어려웠습니다. 감사 – user1102740