因为我的教授不会让我使用RegEx,所以我坚持使用循环来检查字符串上的每个字符。 有没有人有样本代码/算法?
public void setAddress(string strAddress)
{
do
{
foreach (char c in Name)
{
if ( /*check for characters*/ == false)
{
Address = strAddress;
}
}
if ( /*check for characters*/ == true)
{
Console.Write("Invalid!");
}
} while ( /*check for characters*/ == true)
}
public int getAddress()
{
return Address;
}
我只需要包含字母和数字。字符如!@#$%^&不允许。 我不被允许使用RegEx,因为他还没有教过我们......好吧,在他教这些循环和角色检查的那天我无法上课,所以现在他不会告诉我更多。无论如何,如果有一种更有效的方式而不使用RegEx,这将是有帮助的。
答案 0 :(得分:5)
string s = @"$KUH% I*$)OFNlkfn$";
var withoutSpecial = new string(s.Where(c => Char.IsLetterOrDigit(c)
|| Char.IsWhiteSpace(c)).ToArray());
if (s != withoutSpecial)
{
Console.WriteLine("String contains special chars");
}
你可以完全没有循环:)
来源:https://stackoverflow.com/a/4503614/1714342
编辑:
if(s.Any(c=>c => !Char.IsLetterOrDigit(c) || !Char.IsWhiteSpace(c))
{
Console.WriteLine("String contains special chars");
}
答案 1 :(得分:2)
你可能根本不需要循环,只需进行字符检查:
if (Name.IndexofAny("!@#$%^&*()".ToCharArray() != -1))
Console.WriteLine("Valid Address");
else
Console.WriteLine("Invalid Address");
请参阅http://msdn.microsoft.com/en-us/library/system.string.indexofany.aspx
答案 2 :(得分:0)
具有显式循环的解决方案可以是
String s = @"$KUH% I*$)OFNlkfn$";
foreach (Char c in s)
if (!(Char.IsLetterOrDigit(c) || Char.IsWhiteSpace(c))) {
Console.WriteLine("String contains special chars");
break;
}
答案 3 :(得分:0)
bool check_for_characters(char c)
{
return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
}