使用正则表达式掩码实时控制浮点输入

时间:2012-01-11 18:11:56

标签: javascript jquery regex

我已经实现了控制数字和浮点数的功能。 但它对浮点数不起作用,必须像这样的表达式:

// 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);
}

所以我有多个点或没有点,它让我坚果因为我肯定会接近解决方案...... 在此先感谢您的帮助。

编辑>解

哎呀,感谢关于正则表达式的帮助,我找到了解决方案!

必须进行两项测试:

  • 一个用于caracters测试,逐个测试
  • 另一个用于在输入caracters时测试整个输入

这是最后的剧本,它像花一样,我只是为你分享:

$('.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);
}

2 个答案:

答案 0 :(得分:2)

这个正则表达式

  

(/(^ \ d + $)|(^ \ d +。\ d + $)| [,。] /)

应匹配

  • 1111111每(^ \ d + $)
  • 每个(^ \ d +。\ d + $)
  • 或111111.11111
  • 或逗号后跟任何字符,它可以在表达式中的任何位置。

我怀疑你的正则表达应该是 请注意,我已经逃脱了最后一段时间。这将匹配逗号或句号

  
    

/(^ \ d + [,\。] {0,1} \ d {3})/

  
根据评论中的说明,

可能正是您想要的

  

??[ - +] [0-9] * \ [0-9] +

也可以使用

注意:您可以使用Roy Osherove的Regulazy或工具Regex Buddy来极大地简化您的正则表达生活。

答案 1 :(得分:0)

您想要小数点后面的任意数字位数(逗号或句点)?

出了什么问题:

/^([1-9][0-9]*|0)([\.,][0-9]+)?$/

我为{3}切换了+,为\.切换了[\.,]