2017-01-12 2 views
1

Я хочу проверить адреса электронной почты с запятой regex в 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, [email protected], [email protected]

Вот мой валидация пример кода:

$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 { 

} 
+0

См http://stackoverflow.com/questions/4412725/ как отделенный к матч-а-запятая-лист-из-писем-с-регулярное выражение. Вы можете использовать этот подход ('^ (' + ваше регулярное выражение + ',?) + $ ') Или использовать что-то более PCRE-like' /^([_a-z0-9-]+(?:\.[_a -z0-9 -] +) * @ [а-z0-9 -] + (?:. \ [а-z0-9 -] +) * \ [AZ] {2,3}) (:.?, (? 1)) * $/i' –

+0

Электронная почта не совсем проста в проверке: https://hexillion.com/samples/ <прокрутите вниз до раздела Регулярные выражения. – CD001

+0

Запятые не разрешены в адресах электронной почты, поэтому вы можете также взорваться в запятой, обрезать результаты и использовать 'filter_var()' для проверки каждой записи по отдельности. – jeroen

ответ

5

Вы можете попробовать это

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

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

не использовать взорваться в foreach, сначала добавить его в переменную. использование функции в foreach плохо для производительности –

+2

Вам также необходимо обрезать отдельные строки, поскольку ведущие или конечные пробелы будут аннулировать адрес электронной почты. – jeroen

+0

@PaulRoefs Почему? 'explode' выполняется один раз. –

0

Это ява-скрипт утверждение

var emails='test1test.com,[email protected],[email protected]'; 
    var regex = /^([\w-\.][email protected]([\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; 
         } 
        }  
0

Вы можете сделать это с replace() методом Request класса, чтобы превратить вход в массив, содержащий адреса электронной почты, а затем сделать проверку массива на нем:

// 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); 
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}))*$/ 

Чтобы проверить регулярное выражение вашей электронной почты.

0

В ответ на @Alex Андрея комментарий:

Ниже приведен пример функции, я использовал, чтобы получить результаты, которые вы ищете с помощью PHP взорваться() для разделения сообщений электронной почты. Очевидно, для того, чтобы получить точные функциональные возможности, которые вам нужно, вы должны действительно копаться в этой документации :)

public function validateEmail() 
    { 
     $emails = "[email protected],[email protected],notanemail,[email protected]"; 
     $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 
Смежные вопросы