2013-08-03 67 views
3

函數需要允許數字點和逗號。所以任何人都可以修復我的正則表達式變量?謝謝。 :)功能:Javascript函數需要允許數字,點和逗號

function on(evt) { 
    var theEvent = evt || window.event; 
    var key = theEvent.keyCode || theEvent.which; 
    key = String.fromCharCode(key); 
    var regex = /[0-9]|\./; 
    if(!regex.test(key)) { 
    theEvent.returnValue = false; 
    if(theEvent.preventDefault) theEvent.preventDefault(); 
    } 
} 

回答

19

首先你的正則表達式目前不允許逗號,這是你的要求。

其次,你還沒有使用任何量詞,所以你的正則表達式將只匹配一個字符 - [0-9]dot之一。你需要使用量詞。

第三,不是使用pipe,而是隻能移動字符類中的所有字符。使用下面的正則表達式

嘗試:

/^[0-9.,]+$/ 

量詞+用於匹配的圖案的1個或多個發生。
^ and $ anchor分別匹配字符串的開頭和結尾。

+1

有沒有辦法來限制只有一個點或一個逗號?在你的正則表達式中,12.34,45是正確的 –

7

無需JavaScript的:

<input type="text" pattern="[0-9.,]+" title="Please enter a valid decimal number." /> 

現代瀏覽器會完全處理這個問題。

如果你想特別允許逗號作爲千個分隔符和一個小數點,試試這個:

... pattern="\d{1,2}(,\d{3})*(\.\d+)?" ... 

請注意,我是堅決反對阻止用戶輸入。他們應該能夠輸入他們想要的東西,然後告訴他們是否輸入了無效的東西。

2

在我看來,這是最好的解決方案,涵蓋了更多的輸入案例並允許浮動。

 $(".numerical").on('input', function() { 
       var value=$(this).val().replace(/[^0-9.,]*/g, ''); 
       value=value.replace(/\.{2,}/g, '.'); 
       value=value.replace(/\.,/g, ','); 
       value=value.replace(/\,\./g, ','); 
       value=value.replace(/\,{2,}/g, ','); 
       value=value.replace(/\.[0-9]+\./g, '.'); 
       $(this).val(value) 

     }); 
0

有時/^[0-9.,]+$/是不行的 如果沒有,那麼你可以做這樣的事情:

/^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$/ 
+0

這不允許使用負數。 – ncubica

相關問題