【问题标题】:regular expression for floating point value浮点值的正则表达式
【发布时间】:2011-12-28 16:14:03
【问题描述】:

我希望我的文本框只有浮点值,并过滤掉任何符号和字母,我找到的最接近的解决方案是:

jQuery(".sow-items .discovery_repeat input.hours").live("keyup", function(e) {       
    $(this).val($(this).val().replace(/[^\d]/, ''));       
});

但它也会过滤掉小数点。如何从上述过滤器或任何新建议中排除小数?

【问题讨论】:

  • 与其过滤掉不是浮点的东西,不如确保它一个有效的浮点?您还需要说明是否允许使用指数表示法。
  • @DaveNewton 没有指数符号

标签: jquery regex floating-point alphanumeric


【解决方案1】:

试试这个:

jQuery(".sow-items .discovery_repeat input.hours").live("keyup", function(e) {       
    $(this).val($(this).val().replace(/[^\d.]/g, ''));       
});

【讨论】:

  • 应该是 /[^\d\.]/ 转义 . 吗?
  • @DaveNewton 你说得对,它可能会导致包含多个小数,你能建议一个更好的解决方案吗?谢谢
  • 点在字符类中使用时不需要转义。
【解决方案2】:

/\b[-+]?[0-9]*\.?[0-9]+\b/g/^[-+]?[0-9]*\.?[0-9]+$/ 应该可以解决问题,除非您想在其中允许像“1.4E-15”这样的数字。

http://www.regular-expressions.info/floatingpoint.html 对这种不寻常的情况有一些建议。

【讨论】:

    【解决方案3】:
    jQuery(".sow-items .discovery_repeat input.hours").live("keyup", function(e) {   
        var newVal = $(this).val().replace(/[^\d.]/, '').split(".");
        if ( newVal.length>2 ) newVal.length = 2; newVal.join("."); 
        $(this).val(newVal);       
    });
    

    @Dave Newton:只有一个. ..

    【讨论】:

      【解决方案4】:

      你需要匹配非数字或非点并且点需要被转义

      jQuery(".sow-items .discovery_repeat input.hours").live("keyup", function(e) {       
          $(this).val($(this).val().replace(/[^\d]|[^\.]/, ''));       
      });
      

      【讨论】:

      • 不是在字符类中。
      • 没错,点不需要转义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多