I have written this code, this code is working fine. But I think there should be some better way to write it, instead of just adding keyCode for everything to allow and disallow.
var element = "testField";
var regexNumber = /^\$?(((\d)\,?)+)?((\d)+)(\.(\d)+)?$/;
$("#" + element).keydown(function(event) {
// Allow only backspace, delete, dot, arrow key, tab, shift+tab
if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 190 || (event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode == 9 || event.keyCode == 16) {
// let it happen, don't do anything
} else {
// Allow copy, paste, select all only numbers
if (((event.keyCode == 65 || event.keyCode == 86 || event.keyCode == 67) && (event.ctrlKey === true || event.metaKey === true))) {
if (event.originalEvent.clipboardData.getData('Text').match(regexNumber) == null) {
event.preventDefault();
}
}
// Ensure that it is a number and stop the keypress
if (event.keyCode < 48 || event.keyCode > 57) {
event.preventDefault();
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="testField" type="text" />