Как добавить многострочный параметр в атрибут RegularExpression? - PullRequest
5 голосов
/ 13 марта 2012

Я использую:

[RegularExpression(@"^(""|\[)?[a-zA-Z0-9']{1,125}(""|\])?$")]

, чтобы убедиться, что каждая строка многострочного текстового поля соответствует друг другу.Однако я не могу понять, как добавить глобальный флаг и параметры многострочного флага.Это невозможно с MVC?Какие еще варианты у меня есть?

Ответы [ 3 ]

5 голосов
/ 14 марта 2012

Вы можете добавить встроенную опцию, чтобы включить MultiLine , не добавляя перегрузку RegexOptions к атрибуту. Это также гарантирует, что выражение будет работать и в Javascript.

    [RegularExpression(@"(?m)^(""|\[)?[a-zA-Z0-9']{1,125}(""|\])?$")]
1 голос
/ 04 декабря 2012

Это то, как вы бы это делали с Regex, в основном не полагаясь на многострочный флаг или атрибут, вместо этого вы явно определяете регулярное выражение для разрешения новых строк, но тот же шаблон должен следовать

[RegularExpression(@"^(""|\[)?[a-zA-Z0-9']{1,125}(""|\])?(?:\r?\n(""|\[)?[a-zA-Z0-9']{1,125}(""|\])?)*$")]
1 голос
/ 13 марта 2012

Не похоже, что RegularExpressionAttribute поддерживает параметры передачи, поэтому вот тот, который позволяет это (компилирование проверено, но не проверено):

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, 
                         AllowMultiple = false)]
public class RegExAttribute : ValidationAttribute
{
    public string Pattern { get; set; }
    public RegexOptions Options { get; set; }

    public RegExAttribute(string pattern) : this(pattern, RegexOptions.None) { }
    public RegExAttribute(string pattern, RegexOptions options)
    {
        Pattern = pattern;
        Options = options;
    }

    public override bool IsValid(object value)
    {
        return Regex.IsMatch(value.ToString(), Pattern, Options);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...