#asp.net-mvc #regex
#asp.net-mvc #регулярное выражение
Вопрос:
Я разрабатываю сайт, который использует встроенную модель учетной записи / контроллер, который поставляется с новым шаблоном сайта MVC. Я хочу иметь возможность разрешать людям регистрироваться, только если они используют один из двух определенных доменов в своем адресе электронной почты.
Так, например, они могут зарегистрироваться, если они используют @domain1.co.uk или @domain2.co.uk , но никакие другие домены (например, Gmail, Yahoo и т.д.) не могут быть использованы.
Если бы кто-нибудь мог указать мне правильное направление, это было бы здорово.
Ответ №1:
При использовании сайта MVC3 по умолчанию у вас будет /Models/AccountModels.cs
файл. Вы можете добавить туда регулярное выражение, чтобы вызвать проверку на стороне клиента * и на стороне сервера.
public class RegisterModel
{
...
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
[RegularExpression(@"^[a-zA-Z0-9._% -] (@domain1.co.uk|@domain2.co.uk)$", ErrorMessage = "Registration limited to domain1 and domain2.")]
public string Email { get; set; }
...
}
Вам нужно будет разработать выражение, которое наилучшим образом соответствует вашим требованиям.
*проверка на стороне клиента предполагает, что ваше представление ссылается на скрипт jquery.validate и имеет Html.ValidationMessageFor(m => m.Email)
и / или Html.ValidationSummary()
, которые должны быть по умолчанию.
Комментарии:
1. Спасибо, Джастин, это было решение для меня. Это работает отлично. Спасибо всем вам, ребята, кто разместил ответы.
2. Рад это слышать! С таким же успехом можно было бы использовать встроенную функциональность, верно?
3. Спасибо, Джастин. Это сэкономило мне время.
4. @tnktnk Круто! Рад, что это помогло.
Ответ №2:
Что еще вам нужно, кроме:
if( email.Contains("@domain1.co.uk") || email.Contains("@domain2.co.uk") )
Register(email);
else
throw, return false, whatever()
Ответ №3:
Когда придет время выполнить проверку, т. Е. заполнено ли поле электронной почты, используйте регулярное выражение, чтобы убедиться, что оно находится в домене. Что касается того, каким должно быть фактическое регулярное выражение, в Интернете много дискуссий о проверке адресов электронной почты с их помощью. Это даже сводится к тому, что должен содержать действительный адрес электронной почты. Я нашел этот пример в Интернете, но, вероятно, это ни в коем случае не лучшее решение, поскольку я не эксперт по регулярным выражениям. Я пробовал это на нескольких примерах, но я уверен, что вы можете придумать некоторые, которые пройдут, когда они не должны:
^w ([- .']w )*@mail.com$
Где mail.com
находится домен, который вы хотите проверить. Если у вас несколько доменов, вы можете либо расширить регулярное выражение, либо выполнить несколько проверок, заменив mail.com
в регулярном выражении все, что хотите использовать.
Кстати, я обнаружил, что регулярное выражение в этом forums.asp.net сообщение, затрагивающее проблему, подобную вашей.
Ответ №4:
Подтвердите это как на интерфейсе (регистрационной форме), так и на серверной части.
Здесь я рекомендую плагин проверки jquery для проверки на стороне клиента.