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

Posted

技术标签:

【中文标题】使用正则表达式掩码实时控制浮点输入【英文标题】:Live control a float input with a regex mask 【发布时间】: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]*[,\.]?\d0,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);

【问题讨论】:

【参考方案1】:

这个正则表达式

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

应该匹配

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

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

/(^\d+[,\.]0,1\d3)/

根据 cmets 中的说明,可能正是您想要的

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

也可以

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

【讨论】:

诚然,我不确定您要完成什么。 感谢您的回复,但您的正则表达式允许:“............”我希望只有一个点。我希望,只有: xnumbers 。 3个号码(12345679.123) [\.]1 应该可以做到只制作一个句点,\d3 将是三位数字。 这会返回 SyntaxError: Invalid regular expression: /(^\d+[,\.]0,1\d3/: Unterminated group 对不起 - 把我的括号放在错误的一边......我添加的另一个可能更优化,顺便说一句......【参考方案2】:

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

有什么问题:

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

我将3 换成了+\. 换成了[\.,]

【讨论】:

这在函数中也不起作用。点被下一个数字替换。我想要:一个像 x 数字这样的数字。 3 个数字(例如:123456.123)

以上是关于使用正则表达式掩码实时控制浮点输入的主要内容,如果未能解决你的问题,请参考以下文章

带有 JQuery 和正则表达式的输入掩码

jquery 验证正则表达式方法与 focusout 上的 jquery 掩码冲突

关于浮点数的正则表达式?

使用正则表达式验证掩码和货币的限制范围

表单输入实时反馈

IBAN 掩码的正则表达式