2012-01-06 6 views
0

У меня есть небольшая форма, где пользователи вводят депозит в долларовой сумме. Эта сумма может быть положительной или отрицательной. Я пытаюсь проверить форму каждый раз, когда нажата клавиша для предотвращения ввода букв или символов.JavaScript onkeyup regular expression

Рассмотрит функцию ниже:

var deposit = document.getElementById("deposit"); 

deposit.onkeyup = function() { 
    var PATTERN = /\d$/; 

    if (!deposit.value.match(PATTERN)) { 
     deposit.value = deposit.value.replace(deposit.value.slice(-1), ""); 
    } 
} 

Это прекрасно работает, и денди, если вы только хочешь, чтобы пользователь мог вводить цифры. Любой другой персонаж будет просто удален. Там, где у меня возникают проблемы, появляется картина, которая будет работать «на лету», чтобы соответствовать положительной или отрицательной валюте (без знака доллара). Пользователи должны иметь возможность ввести необязательный отрицательный знак, по крайней мере одно число, за которым следует десятичная точка, а затем еще 2 числа.

депозит составляет

Пример:

0,09

100,45

4032,34

-0,90

-54,56

-1353,00

Любая помощь, пришедшая с шаблоном или, возможно, даже лучшим методом, будет с благодарностью оценена. Пожалуйста, дайте мне знать, требуется ли более подробная информация.

+1

Ваш заменить функции несовершенна. Когда запускается событие «keyup», возможно, что в поле ввода введено более одного символа. Также * возможно, что пользователь не помещает каретку в конец, в результате чего ваша функция также ломается. –

ответ

4

Вы можете использовать этот шаблон проверки для соответствия этим номерам.

^-?\d+\.\d{2}$

+0

Этот шаблон также не позволит мне вводить символы.Возможно, потому, что, когда вы вводите символ, он не соответствует всему шаблону? – Brett

+0

Это правильно. Если вы останавливаете ввод ключа на основе соответствия шаблону регулярного выражения, то имеет смысл проверять только один символ за раз. Это регулярное совпадение было бы чем-то, что вы должны запускать, когда происходят полевые события «onblur» или «onchange». – James

+0

Я не уверен, что это вас заинтересует, но я работал над валидатором формы JavaScript: http://splatbyte.com/library/jform/docs/demo_quick.php Он поставляется с предварительным загрузкой нескольких валидаций, но если вы посмотрите на предоставленный URL, во втором примере показана пользовательская проверка, которую вы могли бы использовать для запуска этого теста проверки. Эта библиотека также учитывает ключевую фильтрацию. – James

2

Это должно делать то, что вам требуется:

var PATTERN = /\-?\d+\.\d{2}$/; 

Знак вопроса означает, что это необязательно.

+0

Этот шаблон кажется правильным. Тем не менее, он удаляет каждого персонажа, который я набираю. – Brett

1

Обратите внимание, что вы не можете сопоставить допустимый (отрицательный) десятичный знак при каждом нажатии клавиши, так как пользователь начинает с знака минус или цифры, которые уже не соответствуют шаблону.

Вам понадобится проверить правильность введенных символов, а другой - проверить, действительно ли значение является допустимым десятичным знаком при отправке или когда пользователь перемещает фокус с поля.

+0

Я, вот что я думал ... Спасибо за понимание – Brett

0

Вот мое окончательное решение. Я действительно смог заставить свою функцию «onkeyup» работать почти так, как хотелось. Хотя он не проверяет форматирование валюты «на лету», он не позволяет вводить буквы и символы, отличные от указанных. Хотя это может быть не идеально, это, безусловно, соответствует моим потребностям в этой маленькой задаче. Спасибо всем, кто внес вклад.

deposit.onkeyup = function() { 
    var PATTERN = /[^0-9-.]/; 

    if (deposit.value.match(PATTERN)) { 
     deposit.value = deposit.value.replace(deposit.value.slice(-1), ""); 
    } 
} 

я затем проверить формат депозита "ONBLUR"

var PATTERN = /\-?\d+\.\d{2}$/; 

    if (!reDeposit.value.match(PATTERN)) { 
     depositError.innerHTML = "Enter a valid amount"; 
    } 
Смежные вопросы