c# - RegularExpressionAttribute 行为中的正则表达式

标签 c# asp.net regex asp.net-mvc

我正在使用这个正则表达式:@"[ \]\[;\/\\\?:*""<>|+=]|^[.]|[.]$"

第一部分[ \]\[;\/\\\?:*""<>|+=]应匹配括号内的任何字符。

下一部分 ^[.]如果字符串以“点”开头,则应该匹配

最后一部分[.]$如果字符串以“点”结尾,则应该匹配

如果我使用 Regex.IsMatch() 就可以正常工作功能。但是,如果我使用 RegularExpressionAttributeASP.NET MVC ,我总是得到无效的模型。有谁知道为什么会发生这种行为?

例子:

“abcdefg”不应该匹配

.abcdefg"应该匹配

“abc.defg”不应该匹配

“abcdefg”。应该匹配

“abc[defg”应该匹配

提前致谢!

编辑:

正则表达式属性 Specifies that a data field value in ASP.NET Dynamic Data must match the specified regular expression. .

这意味着。我需要“abcdef”匹配,“.abcdefg”不匹配。基本上否定我上面的整个表达。

最佳答案

您需要确保模式匹配整个字符串。

在一般情况下,您可以使用 .* 附加/预先添加模式。

在这里,你可以使用

.*[ \][;/\\?:*"<>|+=].*|^[.].*|.*[.]$

或者,为了提高效率(即减少第一个分支中的回溯),取反字符类的性能会更好:

[^ \][;/\\?:*"<>|+=]*[ \][;\/\\?:*"<>|+=].*|^[.].*|.*[.]$

但最好将匹配文本的分支放在字符串的开头/结尾作为第一个分支:

^[.].*|.*[.]$|[^ \][;/\\?:*"<>|+=]*[ \][;/\\?:*"<>|+=].*

注意:您不必在 .NET 正则表达式中转义 /? 字符,因为您不能在那里使用正则表达式定界符。

最后一个模式的 C# 声明看起来像

@"^[.].*|.*[.]$|[^ \][;/\\?:*""<>|+=]*[ \][;/\\?:*""<>|+=].*"

查看此 .NET regex demo .

RegularExpressionAttrubute:

[RegularExpression(
  @"^[.].*|.*[.]$|[^ \][;/\\?:*""<>|+=]*[ \][;/\\?:*""<>|+=].*", 
  ErrorMessage = "Username cannot contain following characters: ] [ ; / \\ ? : * \" < > | + =")
]

关于c# - RegularExpressionAttribute 行为中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52933230/

相关文章:

c# - datagridview 中的每一行(对象)都有自己的绑定(bind)源?

asp.net - Angular 2 应用程序和 ASP.Net Web API 中的 Windows 身份验证

c# 列表查找重复更新多个列表

c# - 本地测试 web api 时出现 404 not found 错误

php - 正则表达式删除除提供的域相关链接之外的外部链接 php

C# 正则表达式问题

c# - 为什么这个通用约束在似乎有循环引用时编译

c# - 使用参数安全调用多次调用泛型方法(运行时返回类型)的最佳方法

c# - 检查委托(delegate)是否为空

python - 如何拆分字符串并保留其中的分隔符