自定义价格过滤器的正则表达式
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
【讨论】:
以上是关于自定义价格过滤器的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章