【问题标题】:PHP, Validate if user entered an email domain, NOT addressPHP,验证用户是否输入了电子邮件域,而不是地址
【发布时间】:2013-11-17 02:35:15
【问题描述】:

我一直在寻找这个答案,但我找不到这个确切的变化。

我正在寻找以下内容进行验证:

#1)  @toysrus.com
#2)  @staples.com
#3)  @example.com

以下不验证:

#1)  staples.com
#2)  Randy@staples.com
#3)  @testcom

基本上,我想强制用户输入有效的电子邮件域,而不是电子邮件地址。任何线索我该怎么做?

我想也可以向用户询问他们的网站域名,然后在其上附加“@”字符,但这更令人困惑。简单地询问用户会更容易,请输入您的公司电子邮件域名。

谢谢!

【问题讨论】:

  • “我想也可以向用户询问他们的网站域名,然后在其上附加 '@' 字符,但这更令人困惑。”我会说这令人困惑。当询问他们的电子邮件域名时,没有普通用户会输入“@staples.com”。他们只会输入staples.com。您的最佳选择可能只是询问他们的完整电子邮件地址,然后从中解析域。
  • 通常我同意,但我的网络应用程序为用户提供的部分功能是能够根据电子邮件域限制谁可以注册此服务,任何购买此服务的用户都应该知道这意味着什么,或者他们不应该使用该功能。

标签: php validation email dns


【解决方案1】:

您可以使用正则表达式来匹配电子邮件域名。 例如:

$pattern = "^@(\w)+((\.\w+)+)$";
if (preg_match($pattern,$domain))
    echo "Domain name right"

"^@" 表示字符串应以"@"开头。"(\w)+" 至少匹配1个数字或字母。"(.\w+)+" 匹配至少1个域名,如" .com”或“.edu.cn”。 "$" 表示字符串的结尾。

【讨论】:

  • 嘿,感谢您的尝试,但我收到此代码的错误:警告 (2): preg_match() [function.preg-match]: 找不到结束分隔符 '^'
  • 对不起,我写的代码没有运行,忘记在$pattern的开头和结尾加“/”,pattern应该是$pattern = "/^@(\w)+((\.\w+)+)$/";@user2278120
  • 谢谢,现在可以使用了。我接受您的回答为最佳答案。
【解决方案2】:

这可以在一个多阶段的过程中完成

$email = 'something@somedomain.com';
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // The email is a valid format so now we check the domain
    $domain = explode('@', $email);
    if(getmxrr($domain[1])) {
        // This is about as far as we can take it.
        // The email is valid and the domain has MX records
    }
}

【讨论】:

  • OP 明确指出输入将是@somedomain.com,而不是something@somedomain.comfilter_var 根本不适合这个。
  • 向他们询问电子邮件地址(大多数人都理解)并自己做腿部工作比询问他们托管电子邮件的域要容易得多(这更有可能引发不正确响应)。
  • 是的,我同意 - 请注意我对问题本身的评论。不过,如果您要以“不要这样做”来回答问题,您至少应该注意您的回答并没有满足用户的要求。
  • 我已经知道如何执行此操作,但我的用户将理解输入电子邮件域,因为他正在注册的服务的性质。
猜你喜欢
  • 1970-01-01
  • 2012-10-30
  • 2012-04-25
  • 1970-01-01
  • 2011-08-22
  • 2011-07-05
  • 2013-12-20
  • 1970-01-01
  • 2021-07-03
相关资源
最近更新 更多