Хорошо я не собираюсь оборачивать его как поставщик Формата, а скорее, чем перестраивание колеса существует вызов API Win32 для форматирования строки размера на основе предоставленных байтов, которые я много раз использовал в различных приложениях.
[DllImport("Shlwapi.dll", CharSet = CharSet.Auto)]
public static extern long StrFormatByteSize( long fileSize, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder buffer, int bufferSize );
, Таким образом, я воображаю, необходимо быть в состоянии соединить поставщика, использующего что как базовый код преобразования.
Вот ссылка к спецификации MSDN для StrFormatByteSize.
Ну, как я сказал в комментариях, цель этого вопроса заключалась в том, чтобы отфильтровать текстовое поле по числовым значениям. Мне удалось достичь своей цели с помощью события нажатия клавиши.
Я опубликовал плагин jQuery для тех, кто заинтересован в решении.
Верно. Вы не можете сделать такого отображения; нажатие клавиши
может даже не соответствовать вставляемому символу. Или Caps Lock может изменить значение нажатия клавиш, и вы не можете нюхать это. И различные другие морщины .
Если вы хотите узнать код символа, ваш единственный вариант - использовать событие нажатие клавиши
.
Что ж, если ваша проблема заключается в преобразовании кодов клавиш в символы, почему бы не позволить браузеру сделать это за вас? Это может показаться отвратительным, но вы можете просто разрешить браузеру изменять текстовое поле (так что удаление - это удаление, а точка - это точка), а затем вернуться и отредактировать его ... Гм ... может быть, что-то вроде этого :
function hookEvents() {
$('#myTextBox').oldValue = $('#myTextBox').value;
$('#myTextBox').bind('keyup', function(event) {
// Maybe nothing's changed?
if (event.target.oldValue == event.target.value) {
return;
}
var validInput = /(\-?[0-9]*(?:\.[0-9]*)?)/;
var input = event.target.value;
var result = validInput.exec(input);
if (result.index != 0 || result[result.length-1] != input.length)
{
event.target.value = result[0];
}
// update for later
event.target.oldValue = event.target.value;
});
}
Самая большая проблема с этим подходом заключается в том, что каждая нажатая клавиша на мгновение появляется на экране. С другой стороны, с REGEX у вас гораздо больше контроля над форматом разрешенного ввода. В приведенном выше примере я разрешаю только положительные или отрицательные числа (с необязательной десятичной точкой). Например: «123», «-123», «-123,456», «123,456».
Я знаю, что это не совсем ответ на ваш вопрос, но это полностью обходит проблему!