【发布时间】:2013-08-02 02:11:30
【问题描述】:
我正在编写 PHP 来验证表单数据。 我的提醒框出现问题。
这是我的代码的骨架:
function emailcheck ($email1)
{
$regexp="/^[a-zA-Z0-9_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.-]+$/";
if (preg_match($regexp,$email1))
{
return TRUE;
}
else
{
return FALSE;
}
}
if (isset($_POST['submit'])) {
if ($emailcheck == TRUE){
//send email
//various fields etc
echo '<script type="text/javascript"> alert("Your form has been submitted.") </script>';
}
else
{
echo '<script type="text/javascript"> alert("Enter a valid email address.") </script>';
return FALSE;
}
}
当我测试 emailcheck 功能为 FALSE 的表单时,我得到了这个;
接下来是:
我该如何解决这个问题?谢谢
编辑
我不关心整个 php/javascript 验证;我正在查看一个特定的细节 - 我在这里的功能做错了什么?为什么它会打印警报..一定有一些基本的我忽略了。
显然,我使用 isset 函数的方式以及我在 emailcheck 函数中的调用方式存在问题。
我有客户端验证,但我专注于这个问题中的 php 验证 - 所以请不要讨论 javascript 验证。
【问题讨论】:
-
我不懂 php。但我认为这条线是有问题的:
if($emailcheck == TRUE)因为emailcheck是一个函数。也许应该是:if($emailcheck($_POST['email']))? -
看起来您正在混合服务器端表单检查与客户端消息并进行检查。如果是这样,你应该决定一个或另一个 - 而不是两者兼而有之。对于服务器端检查,而不是显示 javascript 框,将一些文本回显到将呈现的 HTML 中并执行“捕获”(您检查的
boolean var)以防止进一步的表单处理。 -
@Skippy 我有几句话(可能是题外话?):1- 开始正确缩进您的代码。您很可能会从一开始就阻止问题。 2- 你的正则表达式没有意义,你错过了结束锚
$,我想这是一个错字,你写了一个S吗? 3- 你不需要在字符类[a-zA-Z.]中转义点就可以了。如果连字符不在类的开头或结尾,则应将其转义,因此[a-z-]将匹配字母和连字符。 4- 这个[a-zA-A-Z0-9_\.]到底是什么?我想你的意思是[a-zA-Z0-9_\.] -
@Skippy 5- 除了以上几点,您的正则表达式会因许多电子邮件而失败,只需将
filter_var()与FILTER_VALIDATE_EMAIL一起使用。 6- 尽可能严格,至少在这种情况下:if ($emailcheck === TRUE)注意 3 个等号。 7-echo '<script ....'; return FALSE;这是什么?仅供参考,如果未在函数中使用它,它将退出您的脚本
标签: javascript php html regex alert