2017-06-12 87 views
0

我有代碼將確保它只接受小數點前的3個數字和小數點後的3個數字和只有一個小數點後的數字。正則表達式僅數字和一個小數問題

有一種情況是不起作用的。

例子:

如果我輸入12.123然後回去鍵入12w.123,它將接受「W」,並刪除最後一個數字3。它知道它使用JavaScript分裂有關。

有誰知道如何解決這個問題?

$('.numeric-decimal-63').on('input', function (event) {    
    var val = $(this).val();   
    var regex1 = new RegExp(/^(\d{1,3}|\d{0,3}\.\d{0,3})$/g); 

    var regex2 = regex1.test(val);  

    if (!regex2){ 

     $(this).val(val.slice(0,-1)); 
    } 

}); 
+0

'$(本).VAL(val.slice(0,-1));'這消除了最後一個字符,即使你在中間 – user3080953

+0

型@Tretiak是否想要刪除輸入中不需要的'w'? – Kayla

+0

是的,我是。由於用戶類型I只需要數字值和一位小數以及小數點前後只有3位數 – Tretiak

回答

0
$(this).val(val.slice(0,-1)); 

將刪除最後一個關鍵,所以 「123w1」 它消除了 「1」。你可能想回到以前的狀態:

var state="0"; 
$('.numeric-decimal-63').on('input', function (event) {    
var val = $(this).val();   
var regex1 = new RegExp(/^(\d{1,3}|\d{0,3}\.\d{0,3})$/g); 
if (!regex1.test(val) && val!==""){ 
    $(this).val(state); 
    return; 
} 
state=val; 
}); 
+0

您的解決方案將所有內容抹除並將其設置爲零。我只是想讓這個角色變成空白。 – Tretiak

+0

公平地說,我在var val之前的var狀態=「0」內,因爲它永遠不會被設置。我錯了嗎? – Tretiak

+0

這次我只是再試一次,就像你說的那樣,它的工作原理!謝謝。我不確定它是如何設置的。 – Tretiak

1

絕對肯定永遠不會徹底用戶輸入。原因如下:

假設我輸入了。 ,,瓦特糟糕,手指滑落,沒有問題:←退格,那裏。現在讓我們看看......嗯?爲什麼文本框只顯示12?我的3去哪了?

相反,允許用戶輸入他們想要的任何內容,並且只有在輸入完成後(例如,在change事件中),才能驗證輸入並通知用戶它是否不符合要求。

HTML5可以實現這個要求:

<input type="number" min="0" max="999.999" step="0.001" /> 
+0

數字輸入甚至不允許所有瀏覽器中的字母。見FF。 –

+0

@JenniferMichelle你有沒有試過在'數字'輸入中有非數字輸入時提交表單? –

+0

對不起,我以爲你在談論正確的你類型(我不得不閱讀大約100個線程來弄清楚如何創建我的正則表達式)。雖然有一些,雖然很少,但用戶比看到一堆驗證錯誤更容易。 –