字典字段服务器端的 C# 正则表达式验证 - .Net Core MVC

Posted

技术标签:

【中文标题】字典字段服务器端的 C# 正则表达式验证 - .Net Core MVC【英文标题】:C# Regex Validation on server side on dictionary field - .Net Core MVC 【发布时间】:2020-09-19 16:44:35 【问题描述】:

所以我通过 jquery 进行了客户端验证。我正在尝试在服务器端的应用程序中实现相同的验证

该属性是字典类型,我正在努力寻找有关如何执行此操作的示例。我无法将正则表达式规则添加到属性声明中,因为字典中的每个键都需要不同的正则表达式验证。

例如,在我的控制器 GET 方法中,我初始化了字典:

 model.pt_Left = new Dictionary<string, string>
                    
                         "Key1", "" ,
                         "Key2", "" ,
                         "Key3, "" ,
                         "Key4", "" ,
                    ;

这些键中的每一个都代表视图上的一个输入字段。他们每个人都有自己的正则表达式验证,我已经在视图中完成了。

我不确定这是否可以在服务器端实现。我无法将正则表达式添加到属性声明中,因为这会将表达式放在我所有的“键”上

[Required]
public Dictionary<string, string> pt_Left  get; set; 

我拥有的正则表达式的一个例子是^[0-9]2[.][0-9]2[\/][0-9]2[.][0-9]2$ 这仅适用于 Key1,Key 2-4 每个都有自己不同的正则表达式验证。

【问题讨论】:

可能有 6 种方法可以做到这一点,但是像使用自定义集合而不是 Dictionary 这样的方法可能更适合您。具有 Key、Value 和 ValidationExpression 的属性的 PropertyCollection。或 Dictionary 在 T 上进行验证。答案将是主观的。 谢谢,你有我可以使用的例子吗? Key、Value 和 ValidationExpression 听起来像是我需要的东西。 【参考方案1】:

由于每个正则表达式模式都是独一无二的,这意味着您不能拥有一个厨房水槽一刀切的模式。

但是……

为什么不扩展您的字典,让每个键都包含数据字符串和具有逻辑以处理/验证对象的模式?

类似

public class Data

    public string Value  get; set; 
    public readonly string Pattern  get; set; 
    public IsValid => Regex.IsMatch(Value, Pattern);
    public override string ToString() => Value;

然后你的字典有这个扩展数据

new Dictionary<string, Data>
   
         "Key1", new Data()  Value = "1", Pattern = "^[0-9]..." ,
         "Key2", new Data()  Value = "2...", Pattern = "^\w+..." ,
         "Key3, new Data()  Value = "3...", Pattern = "^[a-d]..." ,
         "Key4", new Data()  Value = "4...", Pattern = "^[0-9]..." ,
   ;

然后您创建了一个带有操作和验证的面向对象的数据类,而不仅仅是一个字符串。使用IsValid 和覆盖ToString 应该比旧字符串更好。

【讨论】:

以上是关于字典字段服务器端的 C# 正则表达式验证 - .Net Core MVC的主要内容,如果未能解决你的问题,请参考以下文章

C#常用正则表达式符号大全

正则表达式 c# 表达式验证除零以外的所有数字

正则表达式,以任意顺序验证字段的语法,具有可接受的值

ASP .NET MVC在每个字段级别禁用客户端验证

在 C# 中使用正则表达式匹配 a^n b^n c^n(例如“aaabbbccc”)

正则概念与应用