2012-03-16 59 views
-1

如何限制使用PHP可以在HTML form中提交的电子邮件地址扩展名?例如,我想要求所有用户输入@gmail.com电子邮件地址。 限制以HTML文本格式提交的电子邮件扩展


编辑:我试过使用 if语句和 substr()返回提交的电子邮件地址(如果它包含正确的电子邮件地址扩展名应该是 @gmail.com)中的最后十个字符。但是,这可能不是最有效/最安全的方法。有没有人知道任何其他更安全的方法来解决这个任务。

例子:

if(isset($_POST['submit'])) { 
    $email = trim(strtolower($_POST['email'])); 

    if(substr($email, -10) != '@gmail.com') { 
     //show error message here 
    } else { 
     //continue script 
    } 
+4

那你试试? – Cfreak 2012-03-16 14:24:55

回答

2

新的HTML 5的元素应该让你这样做,因为他们将接受一个“模式”属性,你可以插入一个正则表达式为限制字符串@gmail结束。 COM。你可以用javacsript/jquery做同样的事情,并根据提交的脚本验证表单。 \ @ gmail.com $应该这样做。

1

是的男人,什么whiterainbow说是好的,但它的客户端验证,这可以很容易地被绕过。你应该这样做,但也检查它在表单验证PHP脚本。应该是这样的:

/*Say the user entered [email protected]*/ 
$website = explode("@", $_POST['email']); 
/*$website is now => array(0 => "email_add", 1 => "gmail.com")*/ 
$website = end($website);  // Grab the last element of the array 

if($website != "gmail.com") 
{// Show some error here} 

/*SUBSTITUTE METHOD: A Shorter method that elias suggested in a comment below*/ 
if (!stristr($_POST['email'],'@gmail.com')) 
{// Show some error here} 

PS - 有一个较短的方式来获得一个数组的最后一个元素和爆炸,记不起它关闭我的头寿...谷歌它

+1

将不起作用:'$ website [count [$ website]];'有语法错误。应该是'$ website [count($ website)]',但这仍然不起作用:count返回2 ...所以应该是'$ website [count($ website)-1]',或者只是'$ website [1]'。 更好:'$ website = end($ website);''''或'array_pop($ website)'。更简单的解决方案是'if(stristr($ _ POST ['email'],'@ gmail.com'))' – 2012-03-16 14:49:36

+0

谢谢Elias,要编辑答案,只是想让这个人知道该怎么做。 – 2012-03-16 14:53:58