在MVC正则表达式中允许部分空白,但不允许全部空白

我试图在我的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

不用说我对正则表达式不是很有经验,但是这很简单,确实让我很沮丧!

prince1594 回答:在MVC正则表达式中允许部分空白,但不允许全部空白

怎么样?

^.*\S.*$

那是...

  • 该行开头的所有内容(不包括任何内容)
  • 后跟非空白字符
  • 之后没有任何内容(包括什么)。

在Regex测试工具中,它似乎对我有用。只要您至少有一个非空白字符,它就会很快乐。

,

因此,我进行了一些测试,得出的结论是,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 66this问题以获取更多详细信息。

本文链接:https://www.f2er.com/3165554.html

大家都在问