2017-10-18 15 views
-3

貼り付け時に発生するイベントリスナーを持つ入力ボックスがあります。

$("#UserInput").on('paste', function(e){ 

}); 

私は12または12.12が有効になりますが、#12や12.12.12はないだろう、有効数字以外のものを貼り付けからユーザーを防ぐために望んでいました。だから私はこれを書いた

var pasteData = ''; 
if(window.clipboardData && window.clipboardData.getData){ 
    pasteData = window.clipboardData.getData('Text'); 
    console.log('window.clipboardData'); 
} 
else{ 
    pasteData = e.originalEvent.clipboardData.getData('text'); 
    console.log('e.clipboardData'); 
} 

if(isNaN(pasteData)){ 
    e.preventDefault(); 
    console.log(pasteData + ' NOT allowed'); 
} 
else{ 
    console.log(pasteData + ' allowed'); 
} 

これは素晴らしい作品です。しかし、ドル記号とカンマも貼り付けることができます。 $ 12と$ 12,000はうまくいくが、$ 12.12.12はうまくいかない。既存のコードを保持する最良の方法はありますが、適切な場所に1つのドル記号とコンマが含まれている貼り付けられた値を許可しますか?

+0

タイプを解決する方法である=数は、ニーズのほとんどを処理します。次に、貼り付けイベントの通貨記号とコンマを取り除くだけです。 –

+0

この場合、これはオプションではありません。 – onTheInternet

+0

下の票を私に説明してもらえますか?これがどのようにルールに従わないのか分かりません。 – onTheInternet

答えて

0

が、私はこの

     $("#UserInput").on('paste', function(e){ 
          var pasteData = ''; 
          if(window.clipboardData && window.clipboardData.getData){ 
           pasteData = window.clipboardData.getData('Text'); 
          } 
          else{ 
           pasteData = e.originalEvent.clipboardData.getData('text'); 
          } 
          var valid = /^\$?\d{1,3}(,?\d{3})*(\.\d{1,2})?$/g.test(pasteData); 
          if(!valid){ 
           e.preventDefault(); 
          }         
         }); 
-2

pasteData$で始まらないか、または残りがNaNであることを確認してください。

ここで&& (!pasteData.startsWith('$') || isNaN(pasteData.slice(1)))を追加します。ここでは

if (isNaN(pasteData) && (!pasteData.startsWith('$') || isNaN(pasteData.slice(1)))) { 
    // ... 
} 
+0

https://stackoverflow.com/help/privileges/vote-down –

+0

多くの人々[この意見を保持](https://meta.stackoverflow.com/questions/252506/question-quality-is-dropping-on) -stack-overflow/252531#252531) –

+0

downvotesの説明には何の意味もありません。それを改善する答えの批判があれば、私はそれを提供するだろう。 –

関連する問題