![](/img/trans.png)
[英]Regular expression to find all words which starts with white space and ends with white space
[英]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
:表示任何空白字符的匹配
+
:表示僅匹配這些字符中的一個或多個
$
:表示字符串的結尾
基本上這是在說字符串的開頭和字符串匹配的結尾之間是否有一個或多個空格。 請注意,如果有空格字符和其他字符的組合,它將不匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.