我正在尝试用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的帮助
答案 0 :(得分:6)
你的正则表达式是正确的。但是你正在检查函数上下文中不存在的$text1
。将其作为参数传递。
另一种选择是使用global
关键字来引用$text1
,如果它没有作为参数传递。它会引起副作用,所以我强烈建议不要这样做。
另一个选项(类似于使用global
关键字)是指超全球数组$GLOBALS
- 与global
相同,这是一种不好的做法。
答案 1 :(得分:3)
您的问题不是来自您的正则表达式,而是来自您的$text1
变量,该变量不属于您的函数范围。它不知道$text1
来自何处,因此您的验证会变得混乱
你应该把它作为参数传递给你的函数,或者把它放在一个全局变量中(不那么优雅),它应该可以正常工作。
但是,您应该考虑使用is_numeric
或is_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