這不是完全清楚你的問題,你是什麼試圖去做。也就是說,我無法從描述中知道應該給輸出什麼任意輸入。
這就是說,它似乎像你可能會嘗試標記包含比拉丁文字母以外的任何字符的任意字符串(即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
和a
至z
(即,來自拉丁字母的大寫和小寫字母)的字符集合中的任何字符而不是將發生匹配。
在這個版本中,如果一個字符匹配表達式—即任何字符不在指定組的A-Za-z
—任一字符串中被發現,則該方法返回true
,指示一個「特殊」的字符被發現。
如果這些代碼示例沒有解決您的需求,請修復您的問題,以便明確需要什麼。請閱讀How do I ask a good question?以獲得有關如何以清晰,可回答的方式表達您的問題的建議。
你期望'A-Z'檢查整個字母表嗎?這不是一個正則表達式。因此,要麼使用正則表達式,要麼擴展列表以包含所有字符。 –
此外,不是檢查所有其他字符,而是檢查它們是否只包含數字? '返回Version1.All(Char.IsDigit)&& Version2.All(Char.IsDigit)'。 –
因爲在你的splChars字符串中你只給出了一個,A,Z,Z它只檢查這四個......你需要輸入所有的字母 –