preg_match没有按照它应该的方式工作

时间:2014-07-26 00:55:09

标签: php

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

以下是它的工作原理。

在第一页中,您必须输入要将费用保存到mysql数据库的项目数。

因此,我们假设您输入3作为项目数量,您将被重定向到另一个页面,您将获得文本框,您将在其中输入项目的名称及其相应的金额,然后单击在保存按钮上将其保存到数据库中。

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

例如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 个答案:

答案 0 :(得分:0)

您的任务的正确模式是:

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

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

也就是说,假设$ amount包含&#34; 123.45&#34;,您的代码应为:

if (!preg_match("^[1-9]\\d*(\\.\\d+)?$", $amount)
{
    echo " Only positive numbers are allowed for amount of item";   
    exit();
}

此外,您应该将引用字符串中的所有反斜杠加倍:

"/[\\.]$/"

因为你的构造

"/[\.]$/"

表示程序收到字符串

/[.]$/