我想知道如何只允许一个电子邮件地址?另外,我如何只检查电子邮件地址中的@符号以验证电子邮件?
这是我的PHP代码。
if (isset($_GET['email']) && strlen($_GET['email']) <= 255) {
$email = mysqli_real_escape_string($mysqli, strip_tags($_GET['email']));
} else if($_GET['email'] && strlen($_GET['email']) >= 256) {
echo '<p>Your email cannot exceed 255 characters!</p>';
}
答案 0 :(得分:6)
别。
使用a completely RFC-compliant validator代替,然后使用实际邮件发送到该地址。确实,向该地址发送邮件是确保它是合法电子邮件地址的唯一真正方法。
答案 1 :(得分:4)
PHP有filter_var可以像这样使用:
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
if (strpos($email, "@") === true) {
// VALID
}
}
这是检查公共地址是否有效(并且不允许明显假货)的简单方法,但是,根据RFC 822,RFC 2822,这不能确保您的电子邮件地址有效或RFC 3696。
我还想指出this。这将根据适当的RFC验证电子邮件地址。
答案 2 :(得分:0)
如果是表单,您可以在表单中使用input type="email"
。它是HTML5的一部分,因此尚未在所有浏览器中实现。
这不会达到完全目的,但它会阻止单个页面加载明显的错误(忘记@或.com)来帮助一点。实施它的浏览器会阻止您提交表单,如果它无效;此外,Apple设备将使用特殊键盘为“@”和“.com”提供该条目。
(只是一个额外的信息,因为我不知道你的整个情况。)
答案 3 :(得分:0)
如何只允许一个电子邮件地址?
运行SELECT
查询以查看是否已有此类电子邮件。
我怎样才能检查电子邮件中的@符号
strpos 就足够了 虽然通过向该地址发送一封信来确认电子邮件地址是个好主意,但是你知道。
您的代码中还有一些要纠正的内容。
您的else if
声明不是必需的,应该只有else
和mysqli_real_escape_string不应该在验证部分。它是数据库相关的功能,而不是验证功能。
如果是注册表,则应使用POST方法
所以,像这样......
$err = array();
if (empty($_POST['email']) $err['email'] = "email cannot be empty";
if (strlen($_POST['email']) >= 256) $err['email'] = "email is too long";
if (!strpos("@",$_POST['email'])) $err['email'] = "malformed email";
$query = "SELECT 1 FROM members WHERE email ='".
mysqli_real_escape_string($mysqli, $_POST['email'])."'";
$res = mysqli_query($mysqli, $query) or trigger_error(mysqli_error($mysqli).$query);
if (mysqli_num_rows($res)) $err['email']="email already present";
//other validations as well
if (!$err) {
//escape all the data.
//run your insert query.
header("Location: ".$_SERVER['REQUEST_URI']);
exit;
} else {
foreach($_POST as $key => $value) {
$_FORM[$key]=htmlspecialchars($value,ENT_QUOTES);
}
include 'form.php';
}
答案 4 :(得分:-3)
尝试使用正则表达式...你可以在谷歌找到模式
on eg:
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){
echo "<center>Invalid email</center>";
}else{
echo "<center>Valid Email</center>";}
}
为preg_match编辑:
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)){
echo "<center>Invalid email</center>";
}else{
echo "<center>Valid Email</center>";
}