Добрый день.
Я столкнулся с задачей проверки правильности ввода суммы (деньги).
Есть input, в который вводятся значения с клавиатуры.
Необходимо проверить:
1. если ввели цифру, то ОК
2. если ввели точку, то ОК
3. если ввели запятую, конвертировать ее в точку
Далее по законам целого или вещественного числа.
Если число целое, тут все ок - просто цифры.
Если вещественное, то:
1. точка может быть только одна
2. После точки может быть не более 2 цифр
2* экспоненциальную форму не рассматриваем
2** знаки вида + и - не рассматриваем
3. если есть точка, но перед ней пусто, автоматом добавляем ноль.
максимальная длинна числа 15 знаков (вместо с точкой).
Не стоит также забывать, что в input число можно:
1. вставить из буфера (пр кн мыши)
2. CTRL + V
3. перетащить со страницы текст
4. ввести с клавиатуры
4* точку можно поставить в любое место несколько раз (надо быть готовым к такому, поэтому в моем примере slice не очень хорошее решение).
Решение.
я написал регулярку, под которую это, как мне кажется подходит, но не совсем понимаю как ей воспользоваться.
^[1-9]{1}[0-9]{0,8}(\.|\,){0,1}[0-9]{0,2}$
Есть ли у кого дельный совет, я далеко не гуру javascript
Вот что я насочинял. Очень прошу помочь, если кто увидит баги
Заранее большое спасибо.
$("#chislo").on("blur", function(){
verify_chislo($(this).val());
});
$("#chislo").on("keypress", function(e){
verify_chislo($(this).val());
});
$("#chislo").on("keyup", function(){
verify_chislo($(this).val());
});
$("#chislo").on("change", function(){
verify_chislo($(this).val());
});
function verify_chislo(ch)
{
if(isnumber(ch))
{
$("#chislo").html(ch + ' руб.');
}
else
{
$("#chislo").val(ch.slice(0,-1));
}
}
function isnumber(param)
{
if ( param == 0 ) return true;
return res = (param / param) ? true : false;
}