Проверьте наличие специальных символов без использования регулярных выражений

1

ima новичок в коде С#, мне нужна помощь при проверке специальных символов без использования регулярных выражений, может кто-нибудь мне помочь?

im используя этот код ATM и хотите, чтобы он работал без регулярного выражения

else if (Regex.IsMatch(textBox2.Text, "^[a-zA-Z ]+$")==false)
        {
            MessageBox.Show("Name may not contain any special characters");
        }

Благодарю!

Теги:

3 ответа

2
Лучший ответ

Решение 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; , То же самое можно сделать и с помощью простой циклы.

  • 0
    char.IsLetter() покрывает значительно большую область, чем класс символов [A-Za-z]
  • 0
    @NicholasCarey - Да, я обновил, чтобы включить более строгую версию. Обновить :)
Показать ещё 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 ;
    }
    
0

Вероятно, вы можете пропустить строку и сравнить символы с ascii-кодами

Как получить значение ASCII строки в С#

Убедитесь, что в верхнем регистре и нижнем регистре

Ещё вопросы

Сообщество Overcoder
Наверх
Меню