This is one of the typical examples where using Regex would be extremely inconvenient, because you would have to foresee all possible permutation, which is nearly impossible: the order of characters is not constrained and maximum length is not limited.
The solution is much simpler than that: scan all characters in the loop and classify them all into 4 (#4 is not used, check up the length in the very beginning) categories you described. You would need to remember only the number of occurences. Then, for each category, apply your criteria on multiplicity: in #1, #2 and #3, must be greater then zero, in #5, should be zero. For #5, instead of "such as", list all and write it in one string, to calculate that a character is not found in that string.
These methods will help you:
http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx[
^] (for rule #5, check "not contains"),
http://msdn.microsoft.com/en-us/library/system.char.aspx[
^]:
http://msdn.microsoft.com/en-us/library/d1x97616.aspx[
^],
http://msdn.microsoft.com/en-us/library/yk2b3t2y.aspx[
^],
http://msdn.microsoft.com/en-us/library/9s91f3by.aspx[
^].
—SA