Вы можете протестировать регулярное выражение в клиенте MySQL, не используя триггер:
mysql> select 'user@example.com' REGEXP '^[^@]+@[^@]+\.[^@]{2,} Это ожидаемо, но как насчет того, чтобы мы дали ему недействительный адрес электронной почты?
mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\.[^@]{2,} Что должно быть 0, но почему бы и нет?
Потому что \.
недостаточно для выхода из точки в регулярном выражении. Один \
теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \
находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\
, чтобы один единственный литерал \
оставался в регулярном выражении после того, как MySQL его отсканировал один раз.
mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]
Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .
as email_match;
+-------------+
| email_match |
+-------------+
| 0 |
+-------------+
П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]
Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .
as email_match;
+-------------+
| email_match |
+-------------+
| 1 |
+-------------+
Что должно быть 0, но почему бы и нет?
Потому что \.
недостаточно для выхода из точки в регулярном выражении. Один \
теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \
находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\
, чтобы один единственный литерал \
оставался в регулярном выражении после того, как MySQL его отсканировал один раз.
mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]
Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .
as email_match;
+-------------+
| email_match |
+-------------+
| 0 |
+-------------+
П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]
Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .
as email_match;
+-------------+
| email_match |
+-------------+
| 1 |
+-------------+
Это ожидаемо, но как насчет того, чтобы мы дали ему недействительный адрес электронной почты?
mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\.[^@]{2,} Что должно быть 0, но почему бы и нет?
Потому что \.
недостаточно для выхода из точки в регулярном выражении. Один \
теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \
находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\
, чтобы один единственный литерал \
оставался в регулярном выражении после того, как MySQL его отсканировал один раз.
mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]
Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .
as email_match;
+-------------+
| email_match |
+-------------+
| 0 |
+-------------+
П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]
Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .
as email_match;
+-------------+
| email_match |
+-------------+
| 1 |
+-------------+
Что должно быть 0, но почему бы и нет?
Потому что \.
недостаточно для выхода из точки в регулярном выражении. Один \
теряется, когда SQL анализирует строку. Нам нужно, чтобы литерал \
находился в строке регулярного выражения, чтобы избежать точки. Поэтому мы должны использовать double \\
, чтобы один единственный литерал \
оставался в регулярном выражении после того, как MySQL его отсканировал один раз.
mysql> select 'user@example.' REGEXP '^[^@]+@[^@]+\\.[^@]{2,} П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]
Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .
as email_match;
+-------------+
| email_match |
+-------------+
| 0 |
+-------------+
П.С. Для чего это стоит, электронные письма являются более сложными, чем ваша простая проверка. Этот старый заархивированный блог имеет несколько попыток всесторонней проверки электронной почты: https://web.archive.org/web/20150910045413/http://squiloople.com/2009/12/20/email-address-validation [ 118]
Наиболее успешным из них стало регулярное выражение, использованное в PHP FILTER_VALIDATE_EMAIL .
Я голосую за помещение его, где это имеет смысл. Большая часть моего материала авторизации обрабатывается через украшение действий контроллера (или даже некоторые контроллеры) с AuthorizeAttribute - или атрибут, полученный из него. В нескольких случаях - как мои меню - я обратился к помещению авторизации, регистрируются в самом коде представления, вместо того, чтобы вычислить его в каждом контроллере и передать флаги в ViewData. Существует несколько экземпляров, где определенные аспекты модели только доступны конкретным ролям, и в тех случаях я обратился к расширению модели с методами, которые могут взять текущего пользователя и роли и сделать проверку там.
Я думаю, что авторизация является сквозным беспокойством. Должен быть в одном месте - аспект, который может быть декларативно применен, где он необходим.
Контроллер!
Ваше Представление должно только обработать пользовательский интерфейс и отобразиться, Ваша Модель должна представить данные в Вашей системе. Ваш Контроллер должен обработать логику того, как система работает.
Авторизация пользователя включает взятие учетных данных, обеспеченных от Представления, проверки их против своего рода списка авторизации в модели и затем выполнении проверки.
Это сделано в контроллере: Получите удостоверения пользователя от Представления, если (соответствуют списку пользователей в соответствии возвратов модели) авторизовывают пользователей, еще отказывают в доступе
Если необходимо выбрать между M, V или c, C является корректным местом. Но, я рекомендую архитектуру, где Ваше приложение все содержится в библиотеках, и UI является просто тонкой фанерой. Вы заканчиваете тем, что раскритиковали стек от Контроллера, но код не находится в контроллере.
В MVC Модель является просто моделью или "немым объектом данных", если Вы будете. Это разработано для содержания состояния и не должно диктовать поведение. Представление состоит в том, чтобы пользователь взаимодействовал с и является также "немым"; представление обрабатывает UI. Контроллер - то, где поведение находится или является точкой входа в поведение в случае, где логика приложения находится в библиотеках. Иметь смысл?
Модель.
Контроллер только для переключения через различные пути. Представление только для того, чтобы... просмотреть.
Таким образом, необходимо сделать все коды авторизации в уровне Model. Идеально, все будет работать просто великолепно. В противном случае затем контроллер возьмет пользователя к надлежащему полю входа в систему.