0

我正在尝试使用 php 验证数据。我只希望输入只是数字。我已经尝试了每一种变化,但无法让它发挥作用。有什么我想念的吗?它会一直返回false。

这是我正在使用的代码的简化版本。

$text1 = $_POST['textbox1'];
function textBox()
{
     $regexp="/^[0-9]+$/";
     if (preg_match($regexp, $text1))
     {
        return TRUE;
     }
     else
     {
        echo'<script type="text/javascript">alert("enter a valid  number.")</script>';
        return FALSE;
     }
}
if (isset($_POST['submit']))
    {
    if (! textBox())
    {
        return FALSE;
    }
     else
    {
        echo'<script type="text/javascript">alert("well done")</script>';
        return TRUE;
    }
}

编辑

好的,我把我的(以前工作的)代码弄得一团糟。是的,你们都是正确的。这是我的变量。对不起,谢谢你们的帮助

4

4 回答 4

6

你的正则表达式是正确的。但是您正在检查$text1函数上下文中不存在的内容。将其作为参数传递。

另一种选择是使用global关键字来引用$text1它是否没有作为参数传递。它会导致副作用,所以我强烈建议不要这样做。

另一种选择(类似于 usingglobal关键字)是引用 superlobal 数组$GLOBALS- 与 相同global,这是一种不好的做法。

于 2013-08-09T08:40:33.110 回答
3

您的问题不是来自您的正则表达式,而是来自$text1不在您的函数范围内的变量。它不知道$text1从哪里来,所以你的验证搞砸了。
您应该将它作为参数传递给您的函数,或者在全局变量中的某个位置(不太优雅),它应该可以正常工作。

但是,您应该考虑使用is_numeric或之类的函数is_int来完成这项工作,而不是依赖正则表达式来完成这项工作。
这应该更高效,更优雅。

于 2013-08-09T09:22:19.660 回答
3

正则表达式不是问题

您的正则表达式有效,因此您的问题出在其他地方,如此示例程序所示:

$regex = "/^[0-9]+$/";
$input = "100";
preg_match($regex, $input, $matches);
echo var_dump($matches);

演示

如果没有完整的代码,就不可能知道问题所在。

于 2013-08-09T09:24:34.167 回答
2

用这个:

if(! textBox($text1)){
 ...
}

或这个:

function textBox()
{
 global $text1;
 ...
}

否则你的函数 textBox() 无法访问变量 $text1

于 2013-08-09T08:49:09.107 回答