PHP 中匹配有效价格的正则表达式

问题描述 投票:0回答:2

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

^[0-9.,]*(([.,][-])|([.,][0-9]{2}))?\$

我使用这个正则表达式来检查有效价格:它捕获/拒绝诸如

xxx
,或
llddd
,或
34.23dsds
之类的东西 并允许诸如
100
120.00

之类的事情

它的问题似乎是,如果它是空白(空),它就会被视为有效,但它不应该。

php regex
2个回答
1
投票

您的问题之一是您在正则表达式中使用了代表“任何字符”的点。如果你指的是一个点,你需要像这样转义它

\.

此外,您应该至少有一个数字,因此将星号

*
替换为
+
表示“一个或多个”。

然后你可以有 .,.,.,.,.,.,- 如果你不删除第一部分中的逗号和点:

^[0-9]+(([\.,][-])|([\.,][0-9]{2}))?$

1
投票

采用 yoiur 正则表达式并解决“不匹配空白”问题:

^[0-9.,]+(([.,][-])|([.,][0-9]{2}))?$

*
允许0个或更多,而
+
允许1个或更多,因此
*
允许空格,但
+
不允许,而是必须至少有一位数字。

编辑:

你应该稍微清理一下这个正则表达式

^[0-9]+(?:[.,-](?:[0-9]{2})?)?$

这就解决了“,,,”的匹配问题

http://www.regextester.com/?fam=95185

编辑2:@Fuzzzzel指出这与我们假设您想要匹配的大小写“50,-”不匹配,并且假定删除捕获组。这是我建议的正则表达式的最新版本:

^[0-9]+([.,-](-|([0-9]{2}))?)?$
© www.soinside.com 2019 - 2024. All rights reserved.