【发布时间】:2012-01-11 18:11:55
【问题描述】:
我制作了一个函数来控制数字和浮点数。 但它不适用于浮点数,必须像这样的表达式:
// 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);
}
【问题讨论】:
标签: javascript jquery regex