PHP-过滤电子邮件地址
我有一个注册脚本,我希望只有具有特定电子邮件的用户才能注册。(例如:所有电子邮件必须以“@test.com”结尾) 这是我的代码:PHP-过滤电子邮件地址,php,validation,email,Php,Validation,Email,我有一个注册脚本,我希望只有具有特定电子邮件的用户才能注册。(例如:所有电子邮件必须以“@test.com”结尾) 这是我的代码: if(isset($\u POST['username']、$\u POST['email']、$\u POST['p'])){ $username=filter\u input(input\u POST,'username',filter\u SANITIZE\u字符串); $email=filter\u input(输入\u POST,'email',过滤\u
if(isset($\u POST['username']、$\u POST['email']、$\u POST['p'])){
$username=filter\u input(input\u POST,'username',filter\u SANITIZE\u字符串);
$email=filter\u input(输入\u POST,'email',过滤\u清理\u email);
$email=filter\u var($email,filter\u VALIDATE\u email);
如果(!filter_var($email,filter_VALIDATE_email)){
$error_msg.='无效的电子邮件地址!
';
}
试试这个
<?php
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo 'Invalid Email';
die;
}
$allowedEmail = array(
'gmail.com',
'yahoo.com',
'stack.com',
); // ALLOWED EMAIL DOMAINS SHOULD BE ADDED INTO THIS ARRAY.
$emailArr = explode('@', $email);
if(in_array($emailArr[1], $allowedEmail)) {
echo 'allowed Email';
} else {
echo 'Not allowed Email';
}
?>
尝试此操作-将检查电子邮件中的字符是否正确,以及是否包含格式正确的电子邮件地址:
$error = 0;
if($_POST['email']){
if (!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.
'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $_POST['email'])){
// your mail is incorrect.
$error++;
}
}
if($error == 0)
{
// you have no errors, manipulate entered data
}
您可以为此使用正则表达式
$email = 'myname@sample.com';
$regex = '/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@test\-test\.com$/';
if(preg_match($regex, $email))
{
echo 'Valid';
}
else
{
echo 'Invalid';
}
您可以使用以下代码:
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
//valid
}
PHP版本:5>=5.2.0
我认为您应该首先使用
过滤器var
确保电子邮件是有效的,然后查看它是否有正确的域,例如通过preg\u match
:
function tellMeIfThisIsValid($email) {
$allowedDomain = '@test-test.com';
$isValid = FALSE;
if (filter_var($email, FILTER_VALIDATE_EMAIL) !== false) {
if (preg_match('/' . preg_quote($allowedDomain) . '$/', $email)) {
$isValid = TRUE;
}
}
printf("%-25s => %s" . PHP_EOL, $email, $isValid ? 'valid' : 'not valid');
}
tellMeIfThisIsValid('test@test-test.com');
tellMeIfThisIsValid('test.test@test-test.com');
tellMeIfThisIsValid('@test-test.com');
tellMeIfThisIsValid('test@test-test.com.se');
tellMeIfThisIsValid('test@anothertest-test.com');
tellMeIfThisIsValid('test@testtest.com');
输出:
test@test-test.com => valid
test.test@test-test.com => valid
@test-test.com => not valid
test@test-test.com.se => not valid
test@anothertest-test.com => not valid
test@testtest.com => not valid
非常感谢您的回答!这对我很有用:
$check=“/^[_a-z0-9-.]*@test test.comt$/i”;
$email=$_POST['email'];
如果(!preg_匹配($check,$email))
{
$error_msg.=“无效的电子邮件地址!”;
}
试试我更新的代码,这将允许你设置允许的电子邮件地址,根据“从PHP 5.3.0开始,此功能已被弃用。非常不鼓励依赖此功能。”除@Arun所说的之外,这并不能回答问题(看起来像是从很久以前流传下来的复制代码;)Arun,我正在使用5.3.8,它运行得很好。安全性因服务器配置而异,不仅仅是在PHP上。如果您正确设置服务器,它将是安全的。此解决方案存在一些问题。首先,$check
正则表达式以comt
结尾,而它应该是com
,但我想这只是一个输入错误。其次,$check
中的点将匹配任何字符,因此它确实会匹配test@test-test.com
但也test@test-testXcom
。有关使用来处理此问题的示例,请参阅我的答案。