正则表达式不匹配数字

时间:2013-08-09 08:35:03

标签: php regex preg-match

我正在尝试用php验证数据。我只想让输入只是数字。我尝试了每一个变化,但无法让它发挥作用。有什么我想念的吗?它将继续返回虚假。

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

$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的帮助

4 个答案:

答案 0 :(得分:6)

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

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

另一个选项(类似于使用global关键字)是指超全球数组$GLOBALS - 与global相同,这是一种不好的做法。

答案 1 :(得分:3)

您的问题不是来自您的正则表达式,而是来自您的$text1变量,该变量不属于您的函数范围。它不知道$text1来自何处,因此您的验证会变得混乱 你应该把它作为参数传递给你的函数,或者把它放在一个全局变量中(不那么优雅),它应该可以正常工作。

但是,您应该考虑使用is_numericis_int等功能来完成这项工作,而不是依靠正则表达式来执行此操作。
这应该更高效,更优雅。

答案 2 :(得分:3)

正则表达式不是问题

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

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

Demo

如果没有完整的代码,就无法知道问题所在。

答案 3 :(得分:2)

使用它:

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

或者这个:

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

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