2012-01-16 6 views
1

私は最初に特定の大学のキャンパスに展開されるアプリケーションを構築しています。電子メールがASP.NET MVCの特定のドメインからのものであることをどのように検証できますか?

私は、正式な生徒のみがサービスにアクセスできるように、ユーザーがサインアップしてメールアドレスを提供することを保証したいと考えています。

これを達成するための例やアイデアはありますか?おそらくカスタム検証属性を使用していますか?

注:は 具体的には、私はちょうど彼らが入力した電子メールが

は、正規表現のように見える.eduの電子メールアドレスを移動するための方法がされていることを確認する必要があります...誰もが上のいくつかのガイダンスを提供することができます適切な表現ですか?

+0

実際のドメインが存在するか、それとも.eduで終わるかを検証しますか? .eduで終わる – epignosisx

+0

で十分でしょう。もう1つのオプションは、私のデータベースにドメインを格納し、それに対してチェックすることだと思います。 – stephen776

+0

regexを使って.eduを素早く確認する方法はありますか? – stephen776

答えて

3

としてビューに表示することができValidationRessult、バックIValidatableObjectから継承し、電子メールアドレスを検証するValidateメソッドをオーバーライドし、そうでない場合は、有効な投げることができる私は、正規表現の属性を作成しますと、カスタムDataAnnotation。あなたのグローバルのApplication_Startの下に注釈を登録してください。次に、クライアント側とサーバー側の両方のモデルで、検証をDataAnnotationとして使用できます。私はよく使用されるすべての正規表現を含むRegularExpressAttributes.csクラスを持っています。私がしているのは、それを私のプロジェクトにドロップすることだけです。人々はそれが私に知らせてほしい場合。

ビュー:

正規表現は、属性

<div class="editor-field span-7"> 
    @Html.LabelFor(model => model.EmailAddress) 
    @Html.EditorFor(model => model.EmailAddress) 
    @Html.ValidationMessageFor(model => model.EmailAddress) 
</div> 

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 
using System.Web.Mvc; 

namespace ProjectsMVC.Helpers 
{ 
    #region RegularExpressionAttributes 
    /// <summary> 
    /// Email validation regular expression attribute 
    /// </summary> 
    /// <remarks>Validates [email protected], [email protected], [email protected]+place.com and combinations thereof.</remarks> 
    public class ValidateEmailAttribute : RegularExpressionAttribute 
    { 
     // public ValidateEmailAttribute() 
     //  : base(@"^\S?([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$") { } 

     public ValidateEmailAttribute() 
      : base(@)@"^\S?([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@someplace.com$") {} 
    } 

    #region DataAnnotationsModelValidator 
    public class EmailValidator : DataAnnotationsModelValidator<ValidateEmailAttribute> 
    { 
     #region Properties 
     /// <summary> 
     /// Error message 
     /// </summary> 
     private readonly string _errorMessage; 

     /// <summary> 
     /// Regular expression pattern 
     /// </summary> 
     private readonly string _pattern; 
     #endregion 

     #region Constructors 
     /// <summary> 
     /// Initializes a new instance of the <see cref="EmailValidator"/> class. 
     /// </summary> 
     /// <param name="metaData">The meta data.</param> 
     /// <param name="context">The context.</param> 
     /// <param name="attribute">The attribute.</param> 
     public EmailValidator(ModelMetadata metaData, ControllerContext context, ValidateEmailAttribute attribute) 
      : base(metaData, context, attribute) 
     { 
      this._errorMessage = attribute.ErrorMessage; 
      this._pattern = attribute.Pattern; 
     } 

     #endregion 

     #region Methods 
     /// <summary> 
     /// Retrieves a collection of client validation rules. 
     /// </summary> 
     /// <returns>A collection of client validation rules.</returns> 
     public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
     { 
      var rule = new ModelClientValidationRegexRule(this._errorMessage, this._pattern); 
      return new[] { rule }; 
     } 

     #endregion 
    } 
} 

Global.ascx.cs最後

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 

    // Register custom model validators 
    DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(ValidateEmailAttribute), typeof(EmailValidator)); 
} 

モデル、User.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 
using ProjectsMVC.Helpers; 

namespace ProjectsMVC.Models 
{ 
    [MetadataType(typeof(User_Validation))] 
    public partial class User 
    { 
     public string ProperName 
     { 
      get 
      { 
       return string.Format("{0} {1}", this.FirstName, this.LastName); 
      } 
     } 

     public string DirectoryName 
     { 
      get 
      { 
       return string.Format("{0}, {1}", this.LastName, this.FirstName); 
      } 
     } 

     public string IsUserActive 
     { 
      get 
      { 
       return Dictionaries.TrueOrFalse.First(t => t.Key == this.IsActive).Value.ToString(); 
      } 
     } 
    } 

    public class User_Validation 
    { 
     [Display(Name = "eName")] 
     [Required(ErrorMessage = "required")] 
     [ValidateEname(ErrorMessage = "invalid")] 
     public string UserName { get; set; } 

     [Display(Name = "First DirectoryName")] 
     [Required(ErrorMessage = "required")] 
     public string FirstName { get; set; } 

     [Display(Name = "Last DirectoryName")] 
     [Required(ErrorMessage = "required")] 
     public string LastName { get; set; } 

     [Display(Name = "Email Address")] 
     [Required(ErrorMessage = "required")] 
     [ValidateEmail(ErrorMessage = "invalid")] 
     public string EmailAddress { get; set; } 

     [Display(Name = "Active User")] 
     [Required(ErrorMessage = "required")] 
     public bool IsActive { get; set; } 
    } 
} 
1

ユーザーが特定の大学に属している場合は、メールの接尾辞が必要です。 テーブルに保存し、ユーザーがシステムにログインして、大学に応じて接尾辞 を確認することができます。

有効なメールアドレスを確認する必要がある場合は、正規表現を使用できます。

有効なメールを確認するには、コード例Cを参照してください。

Regex re = new Regex(@"\w.\[email protected]{1,1}\w[.\w]?.\w"); 
      return re.IsMatch(email); 
+0

電子メールが ".edu"で終了することを検証するには、これをどのように変更できますか? – stephen776

+0

これは動作しますか:Regex(@ "\ w。\ {1,1} \ w [。\ w]?edu"); ?? – stephen776

+0

それは私のために働いた –

1

RemoteAttribute検証属性(RemoteAttribute Class)があります。 パラメータでは、検証プロセスを実行できるコントローラのアクションを指定できます。

2

カスタムバリデーターをお探しの場合は、this articleを参照してください。MVCモデルのバリデーションについての説明があります。

正規表現のアトリビュートをモデルの電子メールフィールドのバリデータとして使用する必要があります。これは記事でも説明されています。

1

理想的には、学校がドロップダウンし、学生が学校を選択してメールアドレスを入力する必要があります。

次に、学校の名前とメールの形式をマッピングすることができます。

school name - ABC 
email format - [\w]+[\.\-\_]?[\w][email protected][edu|org] 

メールの形式はプロバイダによって異なる場合があります。

これらのものは、web.configファイル

<Web.config> 
<appsettings> 
<add key="ABC" value="[\w]+[\.\-\_]?[\w][email protected][edu|org]"/> 
. 
. 
. 

我々はのConfigurationManagerを使用して設定から値を読み取ることができるの一部にすることができます。

さらに、お使いのモデルが検証エラー