php - 匹配价格字符串的正则表达式

标签 php regex string

我是 PHP 新手。我试图检查其中一个表单输入(在本例中包含在 $price 中)是否为小数,如下所示:

if(!preg_match("\\d+(.\\d{1,2})?", $price))
    //do something

在 Java 中,应该是

price.matches("\\d+(.\\d{1,2})?")

但是相同的正则表达式在 PHP 中不起作用。 preg_match 是否也匹配子字符串?

我希望以下输入为真:

300
300.5
300.56

所有其他格式都应为 false。我不知道如何在 PHP 中做到这一点。

最佳答案

我不明白这在 Java 中是如何工作的。第一个数字只匹配一个数字。您的示例匹配多个数字。

试试这个正则表达式:

/\d+(?:\.\d{1,2})?/

注意我是如何将正则表达式放在“包装器”(/)中的,并注意我是如何删除数字匹配前面的 \ 转义的。此外,我用非捕获组替换了小数点周围的捕获组,因为在您的上下文中它看起来不像您需要它。

PHP代码:

if (!preg_match("/\d+(?:\.\d{1,2})?/",$price)) {
    // do something
}

关于php - 匹配价格字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12975226/

相关文章:

php - 将 url 参数翻译为占位符

html - 帮助 sed regex : extract text from specific tag

regex - 删除 R 中的数字而不是日期(正则表达式)

Java:查找某个字符并获取子字符串

java - 如何打印具有与逗号不同的分隔符的列表?

html - stringByReplacingOccurrencesOfString 无法正常运行

php - 使用 PHP 转义包含变量的 MySQL 查询

php - 如何获得Laravel中所有型号的列表?

PHP 8 - 附魔不工作 - 经纪人返回一个空数组

regex - 以简单的方式包含重音符号的好的正则表达式是什么?