Regex与数字不匹配


Regex not matching digit

我正在尝试用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;
    }
}

编辑

好吧,我把我(以前工作的)代码搞得一团糟。。是的,你都是对的。。这是我的变量。。抱歉各位和thnx的帮助

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

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

还有一种选择(类似于使用global关键字)是引用超级全局数组$GLOBALS——与global相同,这是一种糟糕的做法。

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

但是,您应该考虑使用is_numericis_int等函数来完成这项工作,而不是依赖正则表达式来完成。
这应该更高效,也更优雅。

Regex不是问题

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

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

(演示)

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

使用这个:

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

或者这个:

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

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