Preg_match没有按应有的方式工作


preg_match is not working the way it should

我目前正在研究一个名为费用的小型web应用程序,可以通过php数组将您的费用节省到mysql数据库。

这是它的工作原理。

在第一页,你必须输入你想要保存到mysql数据库的费用项目的数量。

那么,让我们假设你输入3作为项目的数量,你会被重定向到另一个页面,在那里你会提供文本框,你会输入项目的名称和相应的金额,然后点击保存按钮保存到数据库。

那么,我如何限制文本框的数量,使其只接受数字字符和一个点,这样数字字符必须开始,然后跟着一个点(这是可选的),它也必须以一个数字字符结束。

e。G 100.8, 250.4, 250, 300.8, 200.

这是我的代码

        foreach ($amount as $digit)
    {
        if((!ctype_digit($digit)) || ($digit<1) || (!preg_match("/['.]$/",$digit)))
    {
        echo " Only positive, numeric, non-zero digits and a dot are allowed for amount of item";   
        exit();
    }
            }

如果你能帮我纠正这个问题,我会很高兴的,因为我已经和这个问题斗争了2天了

适合您的任务的模式是:

"^[1-9]''d*(''.''d+)?$"

表示任何非零数字后跟任意数量的数字,并可选后跟一个点,后面至少有一个数字。

也就是说,假设$amount包含"123.45",你的代码应该是:
if (!preg_match("^[1-9]''d*(''.''d+)?$", $amount)
{
    echo " Only positive numbers are allowed for amount of item";   
    exit();
}

同时,你应该将字符串中的所有反斜杠都翻倍:

"/[''.]$/"

因为你的结构

"/['.]$/"

表示程序接收到字符串

/[.]$/