我已经实现了控制数字和浮点数的功能。 但它对浮点数不起作用,必须像这样的表达式:
// 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);
}
答案 0 :(得分:2)
这个正则表达式
(/(^ \ d + $)|(^ \ d +。\ d + $)| [,。] /)
应匹配
我怀疑你的正则表达应该是 请注意,我已经逃脱了最后一段时间。这将匹配逗号或句号
根据评论中的说明,/(^ \ d + [,\。] {0,1} \ d {3})/
可能正是您想要的
??[ - +] [0-9] * \ [0-9] +
也可以使用
注意:您可以使用Roy Osherove的Regulazy或工具Regex Buddy来极大地简化您的正则表达生活。
答案 1 :(得分:0)
您想要小数点后面的任意数字位数(逗号或句点)?
出了什么问题:
/^([1-9][0-9]*|0)([\.,][0-9]+)?$/
我为{3}
切换了+
,为\.
切换了[\.,]