|+=]|^[.]|[.]$" 第一部分[ \]\[;\/\\\?:*""<>|+=]应匹配括号内的任何字符。 下一部分 ^[.]如-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:15:14 25 4
gpt4 key购买 nike

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

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

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

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

如果我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com