2012-06-07 9 views
5
function validInteger(theNumber){ 
    var anyNonDigits = new RegExp('\D','g'); 
    if(parseInt(theNumber)&&!anyNonDigits.test(theNumber)){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

上記は私が入力を検証するために書いた関数です。私はすべての正の整数が欲しい。私が直面している問題は、RegExpオブジェクトです。これは非常にシンプルでなければならないようですが、なんらかの理由でうまくいかないようです。正規表現を使用して入力に非数字があるかどうかを確認する

たとえば、私が 'f5'を渡すと、私は本当ですが、私が '5f'を渡すと私は偽になります。私は負の数を渡すときにも問題があります。 -3は、RegExpに渡す前に変数を文字列化しても捕捉されません。私はif文に '&&parseInt(theNumber)>0'を追加することでこれを修正できますが、RegExpもそれをキャッチする必要があります。前もって感謝します!単に

+1

'\'はエスケープする必要があるため、正規表現は機能しません。文字列リテラル表記では '\'も意味を持ちます。 'new \ 'RegExp(' \\ D '、' g ');' –

+0

...でも、 'g'修飾子は必要ありません。入力。 –

+0

@amnotiamなぜ私がやっていたことがうまくいかなかったのかに関する情報に感謝します。正規表現は私がまだ新しいことです。うまくいけば、私はすぐにそれを変更します。 –

答えて

11

function validInteger(theNumber){  
    return theNumber.match(/^\d+$/) && parseInt(theNumber) > 0; 
} 

Live DEMO

それとものみ@Ericにより示唆されるようにregexとさらに簡単:

return /^[0-9]\d*$/.test(theNumber); 

Live DEMO

更新:

An excellent cheat sheet.

+0

'parseInt(theNumber)> 0':'/^ [1-9] \ d * $/' – Eric

+0

@Ericは不要です。提案してくれてありがとう、私はあなたの名前でそれを追加しました。 – gdoron

+0

正規表現は '*'が "0以上"であるので空の文字列を呼び出すと思いますが、 "1つ以上"の代わりに '+'を使いたいかもしれません。 – jbabey

1

それは大丈夫正規表現を使用していないなら、あなたが持つことができます。

function validInteger(theNumber){ 
    var number = +theNumber; 

    return number > -1 && number % 1 === 0; 
} 

あなたは0として正の整数を検討すると仮定すると、あなたは間の区別をしたくありません+0と-0。

この関数は、数字で変換できるtheNumberの任意の値を受け入れることに注意してください。「文字列」だけでなく、Numberも渡すことができます。

+0

おそらく '-1

+1

はい申し訳ありませんが、私のタイプミス。 :) – ZER0

+0

@amnotiam。 '' if(str。)」と ''( '')の間に違いがあるのですか?match()) 'と' if(/.../。test(str)) '? – gdoron

0

簡単!

function validate(num){ 
    return (num | 0) > 0; 
}; 

この関数は正の整数に対してのみ "true"を返します。

+1

16進表記の評価方法によって異なります。 '( '0xff' | 0)> 0; // true ' –

+1

'(" +123 "| 0)> 0' =>' true' =>壊れた... ':)' – gdoron

関連する問題