2015-02-08 88 views
-2

我要尋找的正則表達式返回成功只有當輸入字符串包含下列字符表達?C#定期進行字符串匹配

^[[email protected]$^()_-+’:.?]+$ 

我已經明白了^意味着在這裏,但不知道+$。還有沒有其他辦法呢?順便說上述正則表達式還包括^和(

+0

謝謝。我只需要確保在輸入字符串傳遞到服務之前,它只包含上面列出的字符。它不應該包含任何其他字符。 – VVV 2015-02-08 00:18:42

+0

您可以使用\ w作爲.Net中的[a-zA-Z_0-9]的簡寫。 – 2015-02-08 00:32:41

回答

1

關閉之間的空格字符,但擺脫你的字符類中間的那個破折號,並把它放在開頭:

^[[email protected]$^()_+’:.?]+$ 

而且確保當你把它放在你使用正確的琴絃預選賽的字符串(我忘記它叫什麼):

@"^[[email protected]$^()_+’:.?]+$" 

至於你是否能夠做到這一點在其他方面,肯定,例如負超前,這實際上並不符合任何事情,我不認爲是合適的gex優化器會讓其中一個比另一個更好,這只是一個偏好問題。你想要看起來成功的東西(選擇整個字符串,如果有效的話),或者看起來失敗的東西(負面預測)。老實說,如果性能很重要,你應該寫一個好的舊的for並循環字符(或等價的LINQ實現)。正則表達式甚至不會在場內。

2

只包含上面

bool invalidCharsExist = 
    Regex.Replace(input, @"[[email protected]\$\^\ \(\)_\-\+’:\.\?]", "").Length != 0; 

BTW列出的字符:這是不是完全等同於你的正則表達式(也包括非ASCII字母和數字),但我認爲這是一個更好的方法來檢查

var specialChars = new HashSet<char>("[email protected]$^()_-+’:.?"); 
var allValid = input.All(c => char.IsLetterOrDigit(c) || specialChars.Contains(c)); 
1

正則表達式是:^[[email protected]$^()_\-+’:.?]+$

我個人推薦使用https://regex101.com來檢查正則表達式 - 注意它們沒有C#支持,但是通常javascript的RegExp與C#有類似的語法,但它給你一個特別有用的解釋你表達的內容,這裏是從有這個epression的交代:+使用一到unli:在字符串的開始

  • [[email protected]$^()_\-\+’:.?]+比賽出現在下面
    • 量詞列表中的單個字符

      • ^斷言位置mited次,多次可能的,根據需要回饋[貪婪]
      • a-z在a和z(區分大小寫)之間的範圍中的單個字符
      • A-Z在A和Z(情況之間的範圍中的單個字符敏感)
      • 0-9的範圍中的單個字符0 9
      • [email protected]$^()_列表中的單個字符之間和[email protected]$^()_字面上
      • \-字符-字面上
      • 匹配
      • +’:.?在列表中的單個字符’:.?字面上
    • $斷言位置在字符串

    你放什麼在OP問題的結束是從字面上只是忘記逃跑的-,因爲它保留在正則表達式模式中用於特殊目的(即在[]表示法中,-保留用於聲明像a-z這樣的字符範圍)