Я на самом деле пошел на подход, где я позволяю пользователю вводить / вводить все, что он хочет, и вручную приводить значение к числовому. Примерно так (это проект jQuery, но эту идею легко можно использовать без jQuery).
fieldJq.bind('click keyup change blur focus', function (ev) {
var curVal = $(this).val();
$(this).val(curVal.replace(/[^0-9\.]/g, ''));
});
Идея состоит в том, что я позволяю им помещать в них все, что они хотят (поэтому нет шансов нарушить управляющие команды, такие как копирование / вставка и т. Д.), Но после любого изменения значения я удаляю все, что не является цифрой. или десятичная точка. На данный момент он не на 100% пожаробезопасен (10.0.0 не является недействительным), но, по крайней мере, изначально он подходит близко. Если вам не нужна поддержка с плавающей запятой и вы можете удалить \.
из регулярного выражения, у вас будет принудительный числовой ввод.