2009-05-25 142 views
12

我要確保一個字符串只在此範圍內過濾字符串

[AZ] & & [AZ] & & [0-9] & &字符[ - ]

因此所有的信件和數字加上連字符。 我想這...

C#應用程序:

 char[] filteredChars = { ',', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '{', '}', '[', ']', ':', ';', '"', '\'', '?', '/', '.', '<', '>', '\\', '|' }; 
     string s = str.TrimStart(filteredChars); 

這TrimStart()似乎只用字母工作沒有otehr字符,比如$%等

我有沒有實現它錯了嗎? 有沒有更好的方法來做到這一點?

我只是想避免通過每個字符串的指標檢查,因爲會有很多字符串做循環...

的思考?

謝謝!

+0

你應該檢查輸入是有效的而不是它不應該採取的。使用正則表達式來檢查你的字符串。 – David 2009-05-25 20:46:05

回答

30

這似乎是使用regular expression的完全正當理由。

bool stringIsValid = Regex.IsMatch(inputString, @"^[a-zA-Z0-9\-]*?$"); 

針對Miguel的評論,你可以這樣做以刪除所有不想要的字符:

string cleanString = Regex.Replace(inputString, @"[^a-zA-Z0-9\-]", ""); 

注意,插入符號(^)現在被置於角色職業,從而否定它(匹配任何不允許的字符)。

+0

有點免責聲明:我只是從頭頂上的模式,所以它可能不完全是什麼你在追求。如果您按照鏈接進行操作,您將能夠找到構建理想模式所需的信息。 – 2009-05-25 20:47:26

+0

我想他想刪除任何不需要的字符,但是... – miguel 2009-05-25 20:50:16

+3

您需要在字符串的@符號前加上以免它試圖轉義 - :Regex.Replace(s,@「[^ A-z0-9 \ - ]「,」「); – Joel 2009-05-25 21:01:10

1

爲什麼不直接使用replace? Trimstart只會刪除列表中的主要字符...

+0

因爲然後我必須有一噸替換陳述... – Gabe 2009-05-25 20:46:11

+0

只是寫一個循環來掃描和刪除然後 – miguel 2009-05-25 20:48:18

1

我敢肯定,隨着多一點時間,你能想出室內用更好的東西,但是這會給你一個不錯的主意:

public string NumberOrLetterOnly(string s) 
{ 
    string rtn = s; 
    for (int i = 0; i < s.Length; i++) 
    { 
     if (!char.IsLetterOrDigit(rtn[i]) && rtn[i] != '-') 
     { 
      rtn = rtn.Replace(rtn[i].ToString(), " "); 
     } 
    } 
    return rtn.Replace(" ", ""); 
} 
3

請嘗試以下

public bool isStringValid(string input) { 
    if (null == input) { 
    throw new ArgumentNullException("input"); 
    } 
    return System.Text.RegularExpressions.Regex.IsMatch(input, "^[A-Za-z0-9\-]*$"); 
} 
13

這裏有一個與LINQ有趣的方式來做到這一點 - 沒有醜陋的循環,沒有複雜的正則表達式:

private string GetGoodString(string input) 
{ 
    var allowedChars = 
     Enumerable.Range('0', 10).Concat(
     Enumerable.Range('A', 26)).Concat(
     Enumerable.Range('a', 26)).Concat(
     Enumerable.Range('-', 1)); 

    var goodChars = input.Where(c => allowedChars.Contains(c)); 
    return new string(goodChars.ToArray()); 
} 

餵它「你好,世界123?!」它會返回「Helloworld123」。