我正在使用这个正则表达式:@"[ \]\[;\/\\\?:*""<>|+=]|^[.]|[.]$"
第一部分[ \]\[;\/\\\?:*""<>|+=]
应匹配括号内的任何字符。
下一部分 ^[.]
如果字符串以“点”开头,则应该匹配
最后一部分[.]$
如果字符串以“点”结尾,则应该匹配
如果我使用 Regex.IsMatch()
就可以正常工作功能。但是,如果我使用 RegularExpressionAttribute
在 ASP.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/