我是C#代码的新手,我需要帮助验证特殊字符而不使用正则表达式,有人可以帮助我吗?
我正在使用此代码ATM并希望在没有正则表达式的情况下使其工作
else if (Regex.IsMatch(textBox2.Text, "^[a-zA-Z ]+$")==false)
{
MessageBox.Show("Name may not contain any special characters");
}
谢谢!
答案 0 :(得分:2)
正则表达式解决方案并不是很糟糕,但如果禁止使用Regex,则可以执行以下操作:
textBox2.Text.All(Char.IsLetter);
更新
因为你也需要(空格):
textBox2.Text.All(c => Char.IsLetter(c) || c == ' ');
请注意,对于任何Unicode字母,Char.IsLetter
都将返回true。更严格的版本是:
textBox2.Text.All(c => (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c == ' '));
你明白了。基本上,我们会浏览所有字符,看看它是在A-Z
还是a-z
范围内还是空格。
需要using System.Linq;
。使用简单的循环也可以实现同样的目的。
答案 1 :(得分:2)
我们,你可以做很多不同的方式。例如,
一个积极的测试,使用Linq使事情变得美好和陈述性:
public bool isValid( string s )
{
Func<char,bool> valid = c => { c == ' ' || ( c >= 'a' && c <= 'z' ) || ( c >= 'A' || c <= 'Z' ) } ;
return s.All(valid) ;
}
同样使用Linq进行阴性测试
public bool isInvalid( string s )
{
Func<char,bool> valid = c => { c == ' ' || ( c >= 'a' && c <= 'z' ) || ( c >= 'A' || c <= 'Z' ) } ;
return s.Any(!valid) ;
}
Linq不一定是最快的方法,所以你可能只是简单地遍历字符串,老派:
public bool isValid( string s )
{
bool valid = true ;
for ( int i = 0 ; valid && i < s.Length ; ++i )
{
char c = s[i] ;
valid = c == ' ' || ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) ;
}
return valid ;
}
答案 2 :(得分:0)