Что такое лучшие практики для проверки адресов электронной почты на iOS 2.0

<?php
 $table='<table>
            <tr>
             <th>Id</th>
             <th>Name</th>
             <th>Serial</th>
           </tr>';


  $servername = "localhost";
  $username = "";
  $password = "";
  $dbname = "verify";

  // Create connection
  $conn = new mysqli($servername, $username, $password, $dbname);

 // Check connection
 if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
  }

 $result = $conn->query($sql);

  $stack = array();

if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
    array_push($stack, $row);
    if(!$array) {
        return $row;
     }
 }
}

$conn->close();

 $table_content='';
 foreach($stack as $item)
 {
  $table_content.= "<tr>
                     <td>" . $row['ProductId'] . "</td>
                     <td>" . $row['Name'] . " </td>.  
                     <td>" . $row['SerialId'] . "</td>
                   </tr>";

 }
echo $table.$table_content.'</table>';
 ?>
167
задан Marcus S. Zarra 6 November 2017 в 17:03
поделиться

6 ответов

Лучшее решение, которое я нашел до сих пор (и тем, на котором я остановился), это добавить RegexKitLite В проект, который дает доступ к регулярным выражениям через NSString Категории .

Добавлять в проект довольно безболезненно, и, как только он появится, любая логика проверки правильности электронной почты будет работать.

17
ответ дан 23 November 2019 в 20:57
поделиться

Читать RFC. Почти каждый, кто думает, что знает, как разобрать / очистить / проверить адрес электронной почты, неправилен.

http://tools.ietf.org/html/rfc2822 Раздел 3.4.1 очень полезен. Заметьте

dtext           =       NO-WS-CTL /     ; Non white space controls

                        %d33-90 /       ; The rest of the US-ASCII
                        %d94-126        ;  characters not including "[",
                                        ;  "]", or "\"

Да, это означает, что +, 'и т. Д. Являются законными.

20
ответ дан 23 November 2019 в 20:57
поделиться

While the focus on regular expressions is good, but this is only a first and necessary step. There are other steps that also need to be accounted for a good validation strategy.

Two things on top of my head are :

  1. DNS validation to make sure the domain actually exists.

  2. After dns validation, you can also choose to do an smtp validation. send a call to the smtp server to see if the user actually exists.

In this way you can catch all kinds of user errors and make sure it is a valid email.

7
ответ дан 23 November 2019 в 20:57
поделиться

I have found that using a regular expression works quite well to validate an email address.

The major downside to regular expressions of course is maintainability, so comment like you have never commented before. I promise you, if you don't you will wish you did when you go back to the expression after a few weeks.

Here is a link to a good source, http://www.regular-expressions.info/email.html.

4
ответ дан 23 November 2019 в 20:57
поделиться

Хорошее начало - это решить, что вы и не хотите принимать в качестве адреса электронной почты?

99% адресов электронной почты выглядят так: bob. smith@foo.com или fred@bla.edu

Однако технически законно иметь адрес электронной почты, подобный этому: f ! # $% & '* + - / =? ^ _ {|} ~ "ha!" @ Com

Вероятно, в мире существует всего несколько действительных писем для доменов верхнего уровня, и почти никто не использует большинство этих других символов (особенно кавычки и обратные ссылки), поэтому вы можете предположить, что это все недопустимые действия. Но вы должны сделать это как осознанное решение.

Кроме того, делайте то, что говорит Павел, и попытайтесь сопоставить входные данные с регулярным выражением, подобным этому: ^ [A-Z0-9 ._% + -] + @ [A -Z0-9 .-] +. [AZ] {2,} $

Этот адрес будет в значительной степени соответствовать адресу электронной почты каждого.

10
ответ дан 23 November 2019 в 20:57
поделиться

Ответ на Использование регулярного выражения для проверки адреса электронной почты очень подробно объясняет, что грамматика, указанная в RFC 5322, слишком сложна для примитивных регулярных выражений.

Я рекомендую настоящий парсер, например MKEmailAddress .

В качестве быстрого решения для регулярных выражений см. Эту модификацию DHValidation :

- (BOOL) validateEmail: (NSString *) candidate {
    NSString *emailRegex =
@"(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}"
@"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\"
@"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-"
@"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5"
@"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-"
@"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21"
@"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES[c] %@", emailRegex]; 

    return [emailTest evaluateWithObject:candidate];
}
354
ответ дан 23 November 2019 в 20:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: