将用户注册限制为在单个域上发送电子邮件

时间:2016-08-09 作者:wwwolf

我需要只允许那些在单个域上具有电子邮件地址的用户注册。我已经测试了多个正则表达式,这一个在regex沙盒环境中运行良好,但只要我将其放入函数中。php文件,它只会拒绝所有注册,甚至拒绝正确域上的电子邮件地址(下面有错误消息,所以肯定是这个条件破坏了它)。我真的在regex中做了一些愚蠢的事情吗?即使在线regex测试人员说它在做我想做的事情?b) 使用WordPress不支持的正则表达式语法?c) 在函数的其余部分搞砸了什么?d) 误解了codex,这并不像将其添加到函数中那么简单。php?

add_filter( \'registration_errors\', \'myplugin_registration_errors\', 10, 3 );
function myplugin_registration_errors( $errors, $sanitized_user_login, $user_email ) {

    if (!preg_match(\'( |^)[^ ]+@mydomain\\.co\\.uk( |$)\', $user_email )) {
    $errors->add( \'invalid_email\', __( \'ERROR: Only valid "mydomain" email address is allowed.\' ));
    $user_email = \'\';
    }

    return $errors;
}
顺便说一句,我知道我使用的正则表达式并不能完全测试是否输入了有效的电子邮件地址-我所需要做的就是检查域名是否完全正确(显然这不是“真实的”域名!!)

我在之前的帖子(2011年)中也尝试过这个解决方案,但它只是破坏了我的整个网站:(

我已经盯着这个看了这么久了,它可能是显而易见的,我看不到它。。。

非常感谢!

1 个回复
SO网友:bynicolas

您需要使用delimiters 为了让你的正则表达式工作。

从上面的链接

使用PCRE函数时,要求图案用分隔符括起来。分隔符可以是任何非字母数字、非反斜杠、非空白字符。

所以在你的情况下,你可以有这样的东西。注意我是如何使用/ 分隔正则表达式

add_filter( \'registration_errors\', \'myplugin_registration_errors\', 10, 3 );
function myplugin_registration_errors( $errors, $sanitized_user_login, $user_email ) {

  if (! preg_match(\'/( |^)[^ ]+@mydomain\\.co\\.uk( |$)/\', $user_email )) {
    $errors->add( \'invalid_email\', __( \'ERROR: Only valid "mydomain" email address is allowed.\' ));
    $user_email = \'\';
  }

  return $errors;
}
我注意到您在正则表达式的开头和结尾都允许空白。

也许您希望使用这个正则表达式来避免允许空白(除非这是期望的结果)

if (! preg_match(\'/^[a-zA-Z0-9._-]+@mydomain\\.co\\.uk$/\', $user_email )) {...

  • ^ 表示从开始[a-zA-Z0-9._-] 表示任何字母数字字符和点. 强调_ 和dash- 允许使用字符+ 指一个或多个前述标记,[] 在这种情况下\\. 转义点,使其不被解释为任何字符$ 也请注意,由于您过滤到WP注册验证机制,因此您正在添加到当前检查中,因此从技术上讲,WP将在您询问的内容上检查这是否是一封有效的电子邮件

相关推荐

Data Validation in wordpress

在我的主题中,我使用get\\u option()获取用户输入,并根据该输入声明一个新变量并打印在我的单张中。php文件。例如:<?php $tutorial_condition = get_option( \'tutorials_creater\' ); if ( $tutorial_condition == 1 ) { $second_col_class = \'col-9\'; } else { $second_col_clas