我正在尝试用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_numeric
或is_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