自定义价格过滤器的正则表达式

Posted

技术标签:

【中文标题】自定义价格过滤器的正则表达式【英文标题】:Regular Expression for custom price filter 【发布时间】:2021-08-16 00:12:41 【问题描述】:

我正在为特定格式的价格制定正则表达式。

有效的输入是:

自然数 小数(小数点后最多两位),0.0 和 0.00 除外 以上所有条件均不带前导零(ex-05 和 08.45 无效,但 5 和 8.45 有效)

有效测试用例示例

1
11
0.10
0.01
1.1
1.00
11.11

无效测试用例示例

0
0.
0.0
0.00
0.000
01
001
1.
1.111
1111.1111
00.1
00.11
01.11

这是我尝试过但无法正常工作的方法

/^(((?!0)\d+)(.\d1,2)?)|(0\.(([1-9]\d)|(0[1-9])))$/gm

见Demo #1。

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

见Demo #2。

Regular Expression for Currency 中的解决方案对我不起作用,因为它成功验证了 00.11

编辑:我猜想有点摆弄,这次我做对了。只需将 [1-9] 更改为 [0-9] 即可。

^(?![0.]*$|0+[0-9])\d+(?:\.\d1,2)?$

见Demo #3。

感谢Wiktor Stribiżew 帮助这个新手。非常感谢先生。

【问题讨论】:

^(?![0.]*$|0+[1-9])\d+(?:\.\d0,2)?$?见regex101.com/r/uFSPP5/1 它接受“1”。也如您的链接中所示先生。不过感谢您的努力。 目前还不清楚你需要接受什么,不接受什么。然后尝试^(?![0.]*$|0+[1-9])\d+(?:\.\d1,2)?$。见regex101.com/r/uFSPP5/2。另外,请检查重复的问题并根据您的发现更新您的问题(那里的解决方案是否适合您)。 很抱歉再次打扰,但它也接受仍然无效的“000000.80”、“00.80”等。如果可能,请查看regex101.com/r/uFSPP5/3 然后确保使用更具体的标题并将所有有效/无效的测试用例添加到问题中。您还必须解释为什么该副本没有帮助。 【参考方案1】:

使用

^(?!0+(?:\.0+)?$|0+\d)\d+(?:\.\d1,2)?$

见proof

解释

--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    0+                       '0' (1 or more times (matching the most
                             amount possible))
--------------------------------------------------------------------------------
    (?:                      group, but do not capture (optional
                             (matching the most amount possible)):
--------------------------------------------------------------------------------
      \.                       '.'
--------------------------------------------------------------------------------
      0+                       '0' (1 or more times (matching the
                               most amount possible))
--------------------------------------------------------------------------------
    )?                       end of grouping
--------------------------------------------------------------------------------
    $                        before an optional \n, and the end of
                             the string
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    0+                       '0' (1 or more times (matching the most
                             amount possible))
--------------------------------------------------------------------------------
    \d                       digits (0-9)
--------------------------------------------------------------------------------
  )                        end of look-ahead
--------------------------------------------------------------------------------
  \d+                      digits (0-9) (1 or more times (matching
                           the most amount possible))
--------------------------------------------------------------------------------
  (?:                      group, but do not capture (optional
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    \.                       '.'
--------------------------------------------------------------------------------
    \d1,2                  digits (0-9) (between 1 and 2 times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
  )?                       end of grouping
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string

【讨论】:

以上是关于自定义价格过滤器的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Qt编写自定义控件68-IP地址输入框

向自定义正则表达式添加动态错误消息

正则表达式

●c#使用正则表达式

Linux正则表达式

jquery.validation自定义正则表达式验证