簡體   English   中英

在 MVC 正則表達式中允許一些但不是所有的空格

[英]Allow some, but not all white space in a MVC Regular Expression

我正在嘗試在我的 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

不用說我對正則表達式不是很有經驗,但是這是一個簡單的正則表達式,這真的讓我很困惑!

怎么樣:

^.*\S.*$

那是...

  • 行首的任何內容(包括任何內容),
  • 后跟一個非空白字符,
  • 之后是任何東西(包括什么都沒有)。

它似乎在正則表達式測試工具中對我有用。 只要您至少有一個非空白字符,就很高興。

更新:

現在這種行為已記錄在案

原答案:

因此,我做了一些測試並得出結論, RegularExpression總是將正則表達式驗證解釋為完整的字符串匹配。 兩種模式\S^\S$之間沒有區別,似乎該方法總是在模式的開頭添加^並在模式的末尾添加$ 我不知道這是一個錯誤還是有意的行為。 所以,這就是為什么\S在它應該工作時失敗的原因。

正如@Flydog57 在評論中所說,答案是使用.*\S.* 請注意,不需要^$ ,如上所述

編輯:

它似乎是設計上的完全匹配,而不是錯誤。 根據源代碼,第 66 行

我們正在尋找完全匹配,而不僅僅是搜索結果。

 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);

看看這個這個問題,我已經打開了更多細節。

這應該對你^\s+$

^ :表示字符串的開始。

\s :表示任何空白字符的匹配

+ :表示僅匹配這些字符中的一個或多個

$ :表示字符串的結尾

基本上這是在說字符串的開頭和字符串匹配的結尾之間是否有一個或多個空格。 請注意,如果有空格字符和其他字符的組合,它將不匹配。

https://regex101.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM