2016-10-31 6 views
0

ここに私の機能があり、ハイフンなしのクレジットカード番号を返信します。しかし、最初のハイフンに達した時点で停止し、「589」だけを返します。私は何が欠けていますか?JS内のクレジットカード機能でハイフン " - "を解析するにはどうすればいいですか?

var creditCardParse = function(creditCards) { 
    return parseInt(creditCards); 
}; 
    creditCardParse("589-65-9878"); 

戻り値 "589"

+0

を解析する前にそれらを削除しないでください - – nem035

+1

は、なぜあなたはすべてでintに解析していますか( '')?おそらくオーバーフローや先行ゼロ誤差を除いて、あなたはそれで数学をするつもりはありません。単に 'creditCards.replace(" - "、" ")'を使用してください。 –

+0

@PaulAbbott私は同意します。これは多くのプログラマーが苦労しているものです。数字だけが含まれているデータがあれば、必ずしも数字であるとは限りません。経験則としては、体重、長さ、スコアなど、数学的操作を行う場合は数字のみです。そうでない場合は、電話番号、クレジットカード番号、IPアドレスなどの文字列です。 – vlaz

答えて

1

をあなたは、あなたがcreditCards.split

var creditCardParse = function(creditCards) { 
    return parseInt(creditCards.replace(/\D/g,''),10); 
}; 

creditCardParse("589-65-9878"); // 589659878 
+0

'creditCardParse(" 9007-1992-5474-0999 ")// - > 9007199254741000'確かに、私は不正行為をし、' Number.MAX_SAFE_INTEGER'(9007199254740991)をとり、最後の数字を9に入れ替えました。これは有効なクレジットカード番号ではありませんが、この番号を番号として処理すると問題につながる可能性があることを示しています。これは普通の16桁のカード番号であり、9で始まるものがあれば覚えていません。これは問題の可能性があります。私はいくつかのカードが16桁以上の_more_を持つことができ、それぞれが潜在的な問題になることを知っています。 – vlaz

+0

@vlaz - 確かに、大きな数字が問題になる可能性があります。私はクレジットカードの数がどれくらい多いのか考えていますが、なぜOPには文字列だけでなく整数が必要なのか分からず、OPがクレジットカード番号を全く扱っていない理由を理解できません。最近ストライプのようなサービスを利用し、人々のお金を安全に取り扱うことについて多くのことを知らない限り、邪魔してはいけないことを迷惑にならないようにしていました。 – adeneo

+0

あなたの言ったことすべてに同意します。これはOPの質問に対する正確な答えです。しかし、他の人が質問を見て、コメントを読むことに決めた場合、これは間違ったアプローチであると判断するかもしれません。残念ながら、それはSOのインスタンスの1つで、より一般的な意味では必ずしも正しいとは限りません。私は答えが_wrong_または役に立たないので、downvoteがその場合保証されているとは思わない。私はまたupvoteが_right_のように解決している問題が正しくないと感じません。したがって、私はコメントを残します。 – vlaz

関連する問題