Я работаю над веб-приложением, в котором мне нужно проверить поле ввода электронной почты с дополнительными регулярными выражениями.
private string _regexOne = (@"myfirstregex")
private string _regexTwo = (@"mysecondregex");
public class InputModel
{
[Required]
[EmailAddress]
[RegularExpression(((_regexOne)|(_regexTwo)), ErrorMessage = "My custom error message")] /* this line contains an error */
[Display(Name = "Email")]
public string Email { get; set; }
...
}
Эти регулярные выражения мне понадобятся еще несколько раз, поэтому я хочу объявить их глобально, чтобы мне не приходилось копировать и вставлять их везде. Однако приведенный выше код неверен и не запускается.
Итак, мой вопрос (ы): Могу ли я использовать переменную регулярного выражения в этом атрибуте? Если да, то каков будет синтаксис?
Определите регулярные выражения как Constants
, и их можно использовать для объявления атрибутов. См. Образец ниже:
using System;
using System.ComponentModel.DataAnnotations;
public class Program
{
public const string Regex1 = "abc";
public const string Regex2 = "xyz";
public const string CompositeRegex = Regex1 + "|" + Regex2;
public static void Main()
{
Console.WriteLine(Regex1);
Console.WriteLine(Regex2);
Console.WriteLine(CompositeRegex);
}
}
public class TestClass
{
[RegularExpression(Program.Regex1 + "|" + Program.Regex2)]
public string TestProperty {get; set;}
}
Вы можете скомпилировать и увидеть код в этом
Почему бы вам не закодировать свой собственный атрибут, унаследованный от RegularExpressionAttribute?