如何使用正则表达式检查逗号分隔的电子邮件地址

时间:2017-01-12 09:03:13

标签: php regex laravel validation

我想在Laravel 5.1验证中使用regex检查以逗号分隔的电子邮件地址,我在regex下面创建了电子邮件,但它不适用于我。

regex: /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i

我想允许这样的电子邮件:test1test.com, test2@test.com, test3@test.com

这是我的验证示例代码:

$rules = array(
    'email' => 'regex:/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i',
);
$messages = [
    'email.regex' => 'Please enter valid Email.',
];

$validator = Validator::make(Input::all(), $rules, $messages);

if ($validator->fails()) {

} else {

}

5 个答案:

答案 0 :(得分:5)

你可以试试这个

foreach(explode(',', $sEmailAddresses) AS $sEmailAddress) {
$bValid |= filter_var($sEmailAddress, FILTER_VALIDATE_EMAIL);
 }

 $sResult = ($bValid) ? 'Both are valid' : 'One of them are not';

答案 1 :(得分:0)

这是java脚本验证

 var emails='test1test.com,test2@test.com,test3@test.com'; 
    var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
     var result = emails.replace(/\s/g, "").split(",");  
                    for(var i = 0;i < result.length;i++) {
                        if(!regex.test(result[i])) {
                            return false;
                        }
                    }      

答案 2 :(得分:0)

您可以使用Request类的replace()方法将输入转换为包含电子邮件地址的数组,然后对其进行数组验证:

// Split form input value on commas followed by any number of spaces (returns an array)
$request->replace(array('email' => preg_split('~, *~', $request->email)));
// How we should define our validator rule
$validator = Validator::make($request->all(), [
    'email.*' => 'email',
]);
// Turn back to our first value
$request->email = implode(', ', $request->email);

答案 3 :(得分:0)

尝试这个替代方案,

/^([_a-z0-9\-]+)(\.[_a-z0-9\-]+)*@([a-z0-9\-]{2,}\.)*([a-z]{2,4})(,([_a-z0-9\-]+)(\.[_a-z0-9\-]+)*@([a-z0-9\-]{2,}\.)*([a-z]{2,4}))*$/

验证您的电子邮件正则表达式。

答案 4 :(得分:0)

回复@Alex Andrei的评论:

下面你将找到我用来获取你正在寻找的结果的函数的例子,使用PHP explode()来分隔电子邮件。显然,为了获得您需要的确切功能,您应该深入研究文档:)

public function validateEmail()
    {
        $emails = "john@email.com,jack@email.com,notanemail,jill@email.com";
        $explodedEmails = explode(",", $emails);


        foreach ($explodedEmails as $email)
        {
            $validator = \Validator::make(
                array('individualEmail' => $email),
                array('individualEmail' => 'email') 
            );

            if ($validator->passes())
            {
                echo "Email correct <br />";
            }
            elseif($validator->fails())
            {
                echo "Email not correct <br />";

            }

        };

    }

这回应:

Email correct 
Email correct 
Email not correct 
Email correct