Я сделал функцию для управления контрольными числами и числами с плавающей запятой.
Но это не работает должным образом для чисел с плавающей точкой, которые должны быть похожи на это выражение:
// I wish a number like x figures . 3 figures (example : 123456.123)
/^([1-9][0-9]*|0)(\.[0-9]{3})?$/
Но это выражение заставляет исчезнуть точку ...
Следующее работает /(^\d+$)|(^\d+\.\d+$)|[,.]/
, но можно добавить несколько точек:
$('.float_input').live("keypress",function(){inputControl($(this),'double');});
function inputControl(input,format)
{
var value=input.val();
if (format=='int'){expression=/(^\d+$)|(^\d+\.\d+$)/;}
else if (format=='double'){expression=/(^\d+$)|(^\d+\.\d+$)|[,.]/;}
var values=value.split("");
var update="";
for(id in values)
{
if (expression.test(values[id])==true && values[id]!='')
{
// also replace ',' by '.'
update=update+''+values[id].replace(',','.');
}
}
input.val(update);
}
Так что у меня есть несколько точек или нет, это сводит меня с ума, потому что я уверен, что близок к решению
Заранее спасибо за помощь.
РЕДАКТИРОВАТЬ> РЕШЕНИЕ
Ой, спасибо за помощь по поводу регулярных выражений, я нашел решение!
Было необходимо два теста:
- один для теста на каратары, проверенный один за другим
- еще один, чтобы проверить весь ввод при вводе символов
Это последний сценарий, который работает как цветок, и я делюсь им только для вас:
$('.numeric_input').live("keyup",function(){inputControl($(this),'int');});
$('.float_input').live("keyup",function(){inputControl($(this),'float');});
function inputControl(input,format)
{
var value=input.val();
var values=value.split("");
var update="";
var transition="";
if (format=='int'){
expression=/^([0-9])$/;
finalExpression=/^([1-9][0-9]*)$/;
}
else if (format=='float')
{
var expression=/(^\d+$)|(^\d+\.\d+$)|[,\.]/;
var finalExpression=/^([1-9][0-9]*[,\.]?\d{0,3})$/;
}
for(id in values)
{
if (expression.test(values[id])==true && values[id]!='')
{
transition+=''+values[id].replace(',','.');
if(finalExpression.test(transition)==true)
{
update+=''+values[id].replace(',','.');
}
}
}
input.val(update);
}