我想检查所有特殊字符,包括0和除1之外的数字......等等。我怎么能这样做?
我编写了以下代码,该代码适用于特殊字符,但是当我检查字母时,它只适用于a,z和A,Z。
private bool checkSpecialCharacters(string Version1, string Version2)
{
string splChars = @"%!@#$%^&*()?/>.<,:;'\|}]{[_~`+=-öüäß[^a-zA-Z]" + "\"" + @"^[a-zA-Z0]";
char[] splCharsArray = splChars.ToCharArray();
int Index1 = Version1.IndexOfAny(splCharsArray);
int Index2 = Version2.IndexOfAny(splCharsArray);
//index == -1 no special characters
if (Index1 == -1 && Index2 == -1)
{
return false;
}
else
{
return true;
}
}
答案 0 :(得分:0)
您的问题并不完全清楚您要做什么。也就是说,我无法从描述中看出输出应该给出任何输入。
那就是说,似乎就像你可能试图标记任何包含拉丁字母表中除字母之外的任何字符的字符串(即A
到Z
,和小写)。
如果这是真的,那么你可以这样做:
private static bool checkSpecialCharacters(string Version1, string Version2)
{
Tuple<char, char>[] charRanges =
{
Tuple.Create('A', 'Z'),
Tuple.Create('z', 'z'),
};
return !AllInRange(Version1, charRanges) || !AllInRange(Version2, charRanges);
}
private static bool AllInRange(string text, Tuple<char, char>[] charRanges)
{
foreach (char ch in text)
{
bool inRange = false;
foreach (Tuple<char, char> range in charRanges)
{
if (range.Item1 <= ch && ch <= range.Item2)
{
inRange = true;
break;
}
}
if (!inRange)
{
return false;
}
}
return true;
}
以上简单地扫描每个字符串,根据字符范围数组检查每个字符。如果它找到不在任何允许范围内的字符,则将该字符串标记为无效(即返回false
)。然后调用者将返回true
用于标记为无效的任一字符串。
另一种方法是使用正则表达式:
private static readonly Regex _alphaRegex =
new Regex(@"[^A-Za-z]", RegexOptions.Compiled);
private static bool checkSpecialCharacters(string Version1, string Version2)
{
return _alphaRegex.IsMatch(Version1) || _alphaRegex.IsMatch(Version2);
}
上面的内容基本相同,但让Regex
类完成工作。 Regex
的实例创建一次,每次调用该方法时都会共享该实例。表达式只是[^A-Za-z]
,表示对于包含A
到Z
和{的字符集中不的任何字符都会匹配{1}}到a
(即拉丁字母表中的大写和小写字母)。
在此版本中,如果在任一字符串中找到与表达式匹配的字符 - 即指定的z
集合中的任何字符 - ,则该方法返回A-Za-z
,表示&#34;特殊&#34;人物被发现了。
如果这些代码示例不能满足您的需求,那么请修复您的问题,以便明确需要的是什么。请阅读How do I ask a good question?以获取有关如何以明确,可回答的方式提出问题的建议。