【问题标题】:Regex for specific domain name特定域名的正则表达式
【发布时间】:2016-08-09 17:59:54
【问题描述】:

我是一个正则表达式新手,但我希望编写一个正则表达式来检查域名 xyz.com.it 的电子邮件,如果用户键入 abc.com 或其他 TLD 域名,它将通过。如果用户在@之后输入xyz,则只有xyz.com.it会通过,其他像xyz.net.it或xyz.net不会通过。知道怎么做吗?

我试过了

var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
var regexEmail = regex.test($('#email').val());

只验证普通电子邮件

【问题讨论】:

  • 到目前为止您尝试过什么?发布您的尝试?发布一些可能的输入和预期输出
  • 我试过 var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.) +([a-zA-Z0-9]{2,4})+$/; var regexEmail = regex.test($('#email').val());
  • @Uchiha ,它只验证normail电子邮件
  • 确定@uchiha
  • 你的问题被标记为 [php],但你的代码是 JS。是哪一个?

标签: php regex


【解决方案1】:

现在不用regex,你可以简单地使用PHP的strstr函数,比如as

$email = "xyz@xyz.com";
$email2 = "xyz@xyz.net";
$valid_domain = "@xyz.com";

function checkValidDomain($email, $valid_domain){
    if(!filter_var($email,FILTER_VALIDATE_EMAIL) !== false){
        if(strstr($email,"@") == $valid_domain){
            return "Valid";
        }else{
            return "Invalid";
        }
    }else{
        return "Invalid Email";
    }
}

echo checkValidDomain($email, $valid_domain);// Valid
echo checkValidDomain($email2, $valid_domain);// Invalid

为什么我在这里没有使用正则表达式,您也可以在 SO Email validation using regular expression in PHPUsing a regular expression to validate an email address 上阅读许多这些线程

【讨论】:

  • @uchida 谢谢,不过我正在使用 JQuery。您的解决方案是合乎逻辑的,但它只处理我的部分问题。我也在寻找验证普通电子邮件...但无论如何谢谢
  • 这不考虑有效的电子邮件地址,如"foo@bar"@example.com
  • 您选择的模式是损坏的 javascript 模式。我最初的评论仍然有效。
  • 这仍然会失败。关键是您不能简单地执行strstr,因为它会找到第一次出现的字符。 3v4l.org/Kijfh 同样if(!filter_var($email,FILTER_VALIDATE_EMAIL) !== false){ 将标记有效的电子邮件不正确。
  • 那么@PeeHaa这里会是什么情况