我试图在我的MVC模型的属性之一上创建一个正则表达式,该表达式将允许任何文本,但不允许所有空格。
我已经阅读了很多关于此的帖子,但是它们都没有按我的预期做,所以我错过了一些非常明显的东西,或者我没有在寻找正确的东西。
[Required(ErrorMessage = "The Name field is required.")]
[StringLength(100, ErrorMessage = "The Name can only be a maximum
of 100 characters long.")]
[RegularExpression(@"[REGEX HERE]",
ErrorMessage = "The Name field can not be white space only.")]
public string Name { get; set; }
所有错误消息都可以正常工作,而上一个除外。我尝试了以下正则表达式字符串(以及其他许多正则表达式)均未成功,通常当我放置任何空格字符(使用空格字符)时,都会出现错误消息,有时当我添加多个字符时:
@"\S+?"
@"\S+"
@"\S"
@"\s"
我期望的结果如下:
'' < FAIL due to required attribute.
'red' < PASS
'red cake' < PASS
' ' < FAIL due to only white space present
不用说我对正则表达式不是很有经验,但是这很简单,确实让我很沮丧!
答案 0 :(得分:2)
怎么样?
^.*\S.*$
那是...
在Regex测试工具中,它似乎对我有用。只要您至少有一个非空白字符,它就会很快乐。
答案 1 :(得分:1)
因此,我进行了一些测试,得出的结论是,aspnet始终将RegularExpression
验证解释为完整的字符串匹配项。两种模式\S
和^\S$
之间没有区别,似乎该方法总是在模式的开头添加^
,在模式的末尾添加$
。惠特尔,这是一个错误或故意行为,我不知道。因此,这就是\S
在应该工作时会失败的原因。
@ Flydog57的注释中的答案是使用.*\S.*
。请注意,如上所述,不需要^
和$
修改:
它似乎完全符合设计要求,而不是错误。根据{{3}}:
我们正在寻找完全匹配的内容,而不仅仅是搜索匹配。
var m = Regex.Match(stringValue); // We are looking for an exact match, not just a search hit. This matches what // the RegularExpressionValidator control does return (m.Success && m.Index == 0 && m.Length == stringValue.Length);
查看我已打开的source code, line 66和this问题以获取更多详细信息。