【问题标题】:Allowing negative and positive decimals in javascript.replace在 javascript.replace 中允许使用负数和正数小数
【发布时间】:2013-04-17 11:09:05
【问题描述】:

我用它来过滤掉所有不是数字的东西(包括小数)

在 keydown 上我正在这样做:

function validateNudgerInput(ele){
          ele.val(ele.val().replace(/[^0-9\.]/g,''));
            if (parseFloat(ele.val())> settings.max
              ||parseFloat(ele.val())< settings.min)
            {
              ele.addClass("nudgerInvalid ")
            }else{
             ele.removeClass("nudgerInvalid")
            }
        }

目前使用: ele.val(ele.val().replace(/[^0-9\.]/g,'')); 这会去除任何不是大于零的数字(允许小数) - 即如果用户按下“A”键,它将阻止它被放置在文本框中

我将如何调整它以允许负数? (允许 - 号)

有效输入示例: 1 -1 123.45 -123.45

【问题讨论】:

  • 为什么小数不是数字?
  • 也许也允许减号?
  • @VisioN 抱歉,我的意思是负数和正数
  • 你能解释一下你为什么这样做吗?你想解决什么问题?您可以将- 添加到字符类中,然后替换过程可能会产生您可能不想要的4-2。一些输入和期望输出的例子会很有帮助。
  • 更新您对 jquery 的抽象问题,这只是一个正则表达式问题。从什么到什么应该是替代品?

标签: javascript regex


【解决方案1】:

这个正则表达式会解析更多的数字:

yourString.replace(/-?[0-9]+(\.[0-9]+)?/g,'')

EDIT :匹配一个从输入开始到结尾的数字:

yourString.match(/^-?[0-9]+(?:\.[0-9]+)?$/,'')

【讨论】:

  • 你需要使用.match,而不是.replace
  • 这会删除所有数字吗?
  • 谢谢,只要我使用“匹配”,这个正则表达式就可以工作。缺点是当我尝试手动输入-1 时,它会去除- 符号的文本框。这可能只是让它忽略该键码的情况。
  • yourString.replace(/[^-?[0-9]+(\.[0-9]+)?]/g,'')
  • @JustAnotherDeveloper:不,这是错误的。这相当于/[^-?\[\]0-9\(\).+]/g,即它将替换不是-?[]0-9(). 或@ 的任何字符987654337@.
【解决方案2】:

听起来您这样做是为了限制文本框中的输入。我通常会记住上次验证文本框时的值,如果当前值无效,例如与正则表达式 /^-?[0-9]+(?:\.[0-9]+)?$/ 不匹配,例如,恢复为之前的值。

【讨论】:

  • 点需要一个反斜杠。
  • 我实际上有一个(我直接从工作代码复制/粘贴)但 stackoverflow 没有显示它。也许它需要逃脱?我会努力解决的。
【解决方案3】:
function testFloat(id)
{
    var obj = document.getElementById(id);
    // allows only integer and float values (negative, positive)  
    obj.value = obj.value.replace(/([^-\d.]+)?((-{0,1}\d*\.?\d*)(.*)?$)/, "$3");            
}

HTML:<input type="text" id="testId"  onkeyup="testFloat(this.id)"/>

希望这会有所帮助。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2011-11-24
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多