ima новичок в коде С#, мне нужна помощь при проверке специальных символов без использования регулярных выражений, может кто-нибудь мне помочь?
im используя этот код ATM и хотите, чтобы он работал без регулярного выражения
else if (Regex.IsMatch(textBox2.Text, "^[a-zA-Z ]+$")==false)
{
MessageBox.Show("Name may not contain any special characters");
}
Благодарю!
Решение regex не очень плохое, но если Regex запрещен, вы можете сделать следующее:
textBox2.Text.All(Char.IsLetter);
Обновить:
Поскольку вы хотите (космос) тоже:
textBox2.Text.All(c => Char.IsLetter(c) || c == ' ');
Обратите внимание, что Char.IsLetter
вернет true для любой буквы Unicode. Более строгая версия:
textBox2.Text.All(c => (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c == ' '));
Вы поняли эту идею. В принципе, мы просматриваем все символы и видим, находится ли он в диапазоне AZ
или az
или пробел.
Нужно using System.Linq;
, То же самое можно сделать и с помощью простой циклы.
Мы сделаем это по-разному. Например,
Положительный тест, использующий 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 ;
}
Вероятно, вы можете пропустить строку и сравнить символы с ascii-кодами
Как получить значение ASCII строки в С#
Убедитесь, что в верхнем регистре и нижнем регистре
char.IsLetter()
покрывает значительно большую область, чем класс символов[A-Za-z]