为什么我的preg_match不起作用?

时间:2016-01-16 22:32:15

标签: php regex debugging

这是我的PHP脚本:

<?php
if (isset($_POST['account']))
{
    $str = $_POST[account];
    if ( !preg_match( "^[0-9]+$", $str ))
    {
        print "<p class=\"fadeout\" style=\"color:rgba(240, 240, 0, 1.0);\" >Enter numbers only!</p>";
    }
    else
    {
        exec('"cmd /c echo weee!"');
        print "<p class=\"fadeout\" style=\"color:rgba(240, 240, 0, 1.0);\" >Your account has been added.</p>";
    }
}
else {
    if (isset($_POST['account']) || $account == "") {
        print "<form method=\"post\"><p>Enter your account number below.</p>";
        print "<input name=\"account\" type=\"text\" size=\"15\" maxlength=\"7\"><input value=\"Send\" type=\"submit\"></form>";
    }
}
?>

我正在尝试通过他们的帐号获取访问者的输入,然后我希望PHP验证它是否是输入的数字并执行某些操作。

现在,它显示输入框和按钮,但点击提交按钮会使其显示“仅输入数字!”无论他们进入什么地方。

为什么不正确检测数字?

4 个答案:

答案 0 :(得分:3)

在我看来,你的正则表达式是不对的。试试这个:

if (!preg_match("/^[0-9]+$/", $str))

答案 1 :(得分:2)

它看起来像你的帖子输入周围的简单语法错误。

if (isset($_POST['account']))
            {
                $str = $_POST[account];

应改为

if (isset($_POST['account']))
            {
                $str = $_POST['account'];

答案 2 :(得分:1)

你有两个问题:

  1. 您无法正确获取$_POST的价值。
  2. 不正确:
        $str = $_POST[account];

    正确:
        $str = $_POST['account'];

    1. 你的正则表达式错了。
    2. 您可以在此处测试正则表达式:https://regex101.com/

      如果您希望它只接受数字,那么改变这一行:

      if ( ! preg_match( "^[0-9]+$", $str ))
      

      对此:

      if ( ! preg_match( "(^[0-9]+$)", $str))
      

答案 3 :(得分:0)

1请自行研究,自己检查代码或自行运行并查看错误日志

$account

尚未在此脚本中设置

isset($_POST['account'])

已经为假,因为它在检查后是否已经在false语句中是否为真且您可以使用ifelse或switch语句

ifelse

switch