ASP.NET MVC で利用できる入力検証は思ったより多くありません。正規表現で指定できる検証属性が用意されていますが、よく使われるであろうメールアドレスなどの検証を行うためには、自分で正規表現を書くなどして指定する必要があります。
私は普段 PHP で業務アプリケーションを書いてるのですが、入力検証は非常に重要になりますのでクラスにまとめて再利用可能にしています。もし MVC で開発するとしたら非常に面倒なことになりそうだったので、簡単にまとめておきたいと思います。
注意:ここの正規表現は一つの例と捉えてください。基本的に誰でも思いつくような簡単な正規表現なので。
半角英字
[RegularExpression(@"[a-zA-Z]+", ErrorMessage = "半角英字のみ入力できます。")] public string Alphabet { get; set; }
半角数字
[RegularExpression(@"[0-9]+", ErrorMessage = "半角数字のみ入力できます。")] public string Number { get; set; }
半角記号
[RegularExpression(@"[ -/:-@\[-\`\{-\~]+", ErrorMessage = "半角記号のみ入力できます。")] public string Symbol { get; set; }
半角英数字
[RegularExpression(@"[a-zA-Z0-9]+", ErrorMessage = "半角英数字のみ入力できます。")] public string AlphaNumber { get; set; }
半角英数字記号
[RegularExpression(@"[a-zA-Z0-9 -/:-@\[-\`\{-\~]+", ErrorMessage = "半角英数字記号のみ入力できます。")] public string AlphaNumberSymbol { get; set; }
半角カタカナ
[RegularExpression(@"[。-゚+]+", ErrorMessage = "半角カタカナのみ入力できます。")] public string HalfKatakana { get; set; }
全角カタカナ
[RegularExpression(@"[ァ-ヶ]+", ErrorMessage = "全角カタカナのみ入力できます。")] public string FullKatakana { get; set; }
郵便番号
[RegularExpression(@"\d{3}-\d{4}", ErrorMessage = "正しい郵便番号ではありません。")] public string Zip { get; set; }
存在する郵便番号かどうかのチェックまで行いたい場合は RemoteAttribute と郵便番号データベースを用意して実装するといいと思います。
[Remote("Check", "Zip", ErrorMessage = "存在しない郵便番号です。")] public string Zip { get; set; }
電話番号
[RegularExpression(@"\d{2,4}-\d{1,4}-\d{4}", ErrorMessage = "正しい電話番号ではありません。")] public string Tel { get; set; }
メールアドレス
[RegularExpression(@"[\w!#$%&'*+/=?^_@{}\\|~-]+(\.[\w!#$%&'*+/=?^_{}\\|~-]+)*@([\w][\w-]*\.)+[\w][\w-]*", ErrorMessage = "正しいメールアドレスではありません。")] public string Email { get; set; }
MvcFutures の EmailAddressAttribute を使うとシンプルにかつ正確なチェックで書けます。
[EmailAddress(ErrorMessage = "正しいメールアドレスではありません。")] public string Email { get; set; }
URL
[RegularExpression(@"https?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+", ErrorMessage = "正しい URL ではありません。")] public string Url { get; set; }
MvcFutures の UrlAttribute を使うとシンプルに書けます。
[Url(ErrorMessage = "正しい URL ではありません。")] public string Url { get; set; }