簡體   English   中英

如何在RegularExpression屬性上添加多行選項?

[英]How to add multiline option on RegularExpression attribute?

我在用:

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

確保多行文本框的每一行都正確匹配。 但我無法弄清楚如何添加全局標志和多行標志選項。 MVC不可能嗎? 我還有其他選擇嗎?

您可以添加內聯選項以啟用MultiLine,而無需向屬性添加RegexOptions重載。 這也確保表達式也適用於Javascript。

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

這就是你如何使用Regex,基本上不依賴於多行標志或屬性,而是明確定義正則表達式以允許新行,但需要遵循相同的模式

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

它看起來不像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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM