2016-10-17 6 views
1

私は、パーセント値を検証しています:検証パーセント値

validateFloatValue: function(value) { 
    var number = parseFloat(value); 
    if (isNaN(number)) { 
     console.log("Invalid value"); 
    } 
} 

基本的には、値が文字列として渡されます。それは "33.45"に合格します。しかし、私はユーザーが "33.45%"を入力することを許可したくありません。しかし、この場合、parseFloatは "33.45%"を33.45 parseFloat("33.45")に変換しているので、 "33.45%"のエラーはありません。値が "33.45%"の場合、どのようにエラーをスローすることができますか?

+0

'parseFloat'を使う必要はありません。単にisNaNでチェックすることができます。 – Lewis

+1

@ Yogesh: '+'キャストを 'var number = + value'の代わりに使うことができます。 – Ryan

+0

文字列にindexOfで "%"が含まれているかどうかを単純にチェックします。 – aeid

答えて

0

Number.isFiniteは、もう少し厳密に入力を検証します。

validateFloatValue: function(value) { 
    if (!Number.isFinite(number)) { 
     console.log("Invalid value"); 
    } 
} 

ます。また、直接isNaNを使用することができます - それは、よりポータブルになります:

validateFloatValue: function(value) { 
    if (isNaN(number)) { 
     console.log("Invalid value"); 
    } 
} 
0

文字列に%が含まれているかどうかをチェックするだけで何をした場合、このようにindexOfを使用することができます。

if (value.indexOf('%') === -1) { 

} else { 
    console.log("Invalid value"); 
} 

文字列が数字かどうかを確認する場合は、数値関数を使用して文字列を数値に変換できます。

値を正当な数値に変換できない場合は、NaN(Not a Number)が返されます。

だからあなただけの結果は次のように関数isnanを使用してNaNであるかどうかを確認する必要があります。

するvar valueNumber =数(値);

if (!isNaN(valueNumber)) { 

} else { 
    console.log("Invalid value"); 
} 
+0

これは正しく入力されません: '12.3 spam'はまだ無効です。 – qzb

2

あなたは最終的にvalue\d[.,]+\dと一致しない場合は、あなたのニーズにマッチ正規表現を記述する必要がありますように...正規表現に一致しないすべてのものを除外することができます;)

(function validateFloatValue(value) { 
 
    var number = parseFloat(value); 
 
    if (! /^\d+[., ]+\d+$/.test(value) || isNaN(number)) { 
 
     document.getElementById('res').innerHTML = "Invalid value"; 
 
    } 
 
})("12.34%");
<div id=res></div>