【问题标题】:Allow only digit, comma or dot in the user input in JS在 JS 中的用户输入中只允许数字、逗号或点
【发布时间】:2015-11-28 10:15:02
【问题描述】:

我有一个用户输入,其中只允许使用特定的字符集。也就是说,用户应该只能输入一个数字,可能带有浮点数。用户可以使用逗号或点作为分隔符。

我决定使用 JS 替换功能来实现这一点。我的方法是用空字符串替换与集合不匹配的所有内容。

我已经快速整理出正则表达式以匹配集合,这里是:

^\d+[,.]{0,1}\d+$

我知道这可能并不理想,但它还可以,因为无论如何都有服务器端验证。

但是,无论我多么努力,我都无法弄清楚如何用空字符串替换与此正则表达式不匹配的任何内容。

这是我如何使用替换:

var cleanInputOut = function (element) {
    element.value = element.value.replace(/<RegEx goes here>/g, '')
}

我可能做错了。即使功能非常简单,我也可以 - 只需用空字符串替换任何非数字,不是逗号,也不是点。我在正则表达式中尝试了负前瞻,但不幸的是我无法让它按我的意愿工作。

【问题讨论】:

  • 解决方案不同之处在于它不使用替换功能。我也检查过这个,但我很好奇是否可以使用 Replace 实现这样的功能。
  • 查看上面帖子的更新部分,您可以在那里自定义允许的字符并使用替换功能
  • 我注意到了替换功能的使用;我的意思是我只想使用正则表达式来解决这个问题,而你提出的解决方案有点复杂。我不怀疑它会更干净、更灵活或更健壮,我只是对是否可以使用简单的替换函数和正则表达式来实现我想要的感兴趣。事实证明,确实如此。
  • 停止重新发明轮子。只需使用 HTML5 为您提供的内容,进行服务器端验证并完成它。 html5pattern.com

标签: javascript regex


【解决方案1】:

看来我是用了

/[^\d,.]/g

所以函数是

 var cleanInputOut = function (element) {
     element.value = element.value.replace(/[^\d,.]/g, '')
 }

我真的不明白为什么 ^ 字符既用于标记否定集又用于标记行的开头,但它似乎正在工作。

我之前尝试过这个正则表达式,但它有时表现得很奇怪,但我不确定问题出在正则表达式本身。无论如何,欢迎任何关于方法或正则表达式的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多