DataAnnotations - Запрещать числа или разрешать только заданные строки - PullRequest
17 голосов
/ 28 мая 2010

Можно ли использовать аннотации данных ASP.NET MVC 2, чтобы разрешать только символы (без номера) или даже предоставлять белый список разрешенных строк? Пример?

Ответы [ 3 ]

36 голосов
/ 29 мая 2010

Используйте атрибут RegularExpressionAtribute .

Что-то вроде

[RegularExpression("^[a-zA-Z ]*$")]

будет соответствовать a-z в верхнем и нижнем регистре и пробелам.

Белый список будет выглядеть примерно так:

[RegularExpression("white|list")]

который должен разрешать только "white" и "list"

[RegularExpression("^\D*$")]

\ D представляет нечисловые символы, поэтому в приведенном выше примере допускается строка с любым значением, кроме 0-9.

Регулярные выражения сложны, но в Интернете есть несколько полезных инструментов тестирования, таких как: http://gskinner.com/RegExr/

4 голосов
/ 29 мая 2010

Да. Используйте «[RegularExpression]»

Это отличный сайт о регулярных выражениях http://www.regexlib.com/CheatSheet.aspx

3 голосов
/ 30 марта 2017

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

Здесь я написал валидатор белого списка для свойств int:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;

namespace Utils
{
    /// <summary>
    /// Define an attribute that validate a property againts a white list
    /// Note that currently it only supports int type
    /// </summary>
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
    sealed public class WhiteListAttribute : ValidationAttribute
    {
        /// <summary>
        /// The White List 
        /// </summary>
        public IEnumerable<int> WhiteList
        {
            get;
        }

        /// <summary>
        /// The only constructor
        /// </summary>
        /// <param name="whiteList"></param>
        public WhiteListAttribute(params int[] whiteList)
        {
            WhiteList = new List<int>(whiteList);
        }

        /// <summary>
        /// Validation occurs here
        /// </summary>
        /// <param name="value">Value to be validate</param>
        /// <returns></returns>
        public override bool IsValid(object value)
        {
            return WhiteList.Contains((int)value);
        }

        /// <summary>
        /// Get the proper error message
        /// </summary>
        /// <param name="name">Name of the property that has error</param>
        /// <returns></returns>
        public override string FormatErrorMessage(string name)
        {
            return $"{name} must have one of these values: {String.Join(",", WhiteList)}";
        }

    }
}

Пример использования:

[WhiteList(2, 4, 5, 6)]
public int Number { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...