【问题标题】:Regex in JavaScript to validate both decimal and numerical valuesJavaScript 中的正则表达式来验证十进制和数值
【发布时间】:2023-03-08 00:47:01
【问题描述】:

我正在使用EXT-JS 并正在使用VType 为表单中的特定字段指定regex

我需要此字段来接受以下值: 1, 11, 11561.464, 1.0, 56.0, 等并拒绝以下值:

.1, 1., 56.(我需要我的值以数字开头和结尾)

我使用了以下正则表达式:

  1. /^([0-9][0-9]*)([.])?([0-9]*[0-9])$/
    这接受诸如 21.,.1 2.2 之类的值,并拒绝诸如 1., 2.,1.0 之类的值

  2. /^\d+(\.\d)?/
    这接受像 1.,11 这样的值。

  3. /^\d+\.?(\d+)$/
    这接受像 11.、1.1、11.1 这样的值并拒绝像 1 这样的值。

为什么同一个正则表达式拒绝像 1.(一位数 + 小数,这是可以接受的)这样的值,但接受像 11.(两位数 + 小数,这是完全不可接受的)这样的值

【问题讨论】:

  • 最后一个正则表达式对我有用。请发布一些代码。
  • @Doorknob 最后一个模式不能接受单个数字。

标签: regex extjs decimal numerical


【解决方案1】:

您的第二个模式几乎一直存在。一件事:你忘记了字符串结束锚:

/^\d+(\.\d)?$/

现在不能有尾随句点了。

另一件事:你也应该重复第二个\d+,除非你想把自己限制在小数点后一位:

/^\d+(\.\d+)?$/

最后,除非您明确需要,否则抑制捕获通常是一种好习惯:

/^\d+(?:\.\d+)?$/

【讨论】:

  • 非常感谢@m.buettner! :)
【解决方案2】:

两个都可以试试

/^\d+(\.\d+)?$/

【讨论】:

  • 你忘了转义点 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
相关资源
最近更新 更多