Gab*_*abe 15 c# string filtering
我想确保字符串只包含此范围内的字符
[az] && [AZ] && [0-9] && [ - ]
所以所有字母和数字加上连字符.我试过这个......
C#App:
char[] filteredChars = { ',', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '{', '}', '[', ']', ':', ';', '"', '\'', '?', '/', '.', '<', '>', '\\', '|' };
string s = str.TrimStart(filteredChars);
Run Code Online (Sandbox Code Playgroud)
这个TrimStart()似乎只能使用没有像%%等字符的字母
我做错了吗?有没有更好的方法呢?
我只是想避免遍历每个字符串的索引检查,因为会有很多字符串要做...
思考?
谢谢!
Tom*_*han 34
这似乎是使用正则表达式的完全正当理由.
bool stringIsValid = Regex.IsMatch(inputString, @"^[a-zA-Z0-9\-]*?$");
Run Code Online (Sandbox Code Playgroud)
为回应米格尔的评论,您可以执行此操作以删除所有不需要的字符:
string cleanString = Regex.Replace(inputString, @"[^a-zA-Z0-9\-]", "");
Run Code Online (Sandbox Code Playgroud)
请注意,插入符号(^
)现在被置于内部的字符类,从而否定它(匹配任何非允许的字符).
Jud*_*ngo 13
使用LINQ这是一个有趣的方法 - 没有丑陋的循环,没有复杂的RegEx:
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());
}
Run Code Online (Sandbox Code Playgroud)
喂它"你好,世界?123!" 它将返回"Helloworld123".