Подтвердить что ты не робот

Как определить, содержит ли строка какие-либо специальные символы?

Я хочу найти, содержит ли строка какие-либо специальные символы, такие как!, @, #, $,%, ^, &, *, (,).... и т.д.

Как я могу сделать это, не зацикливая все символы в строке?

4b9b3361

Ответ 1

  Regex RgxUrl = new Regex("[^a-z0-9]");
                    blnContainsSpecialCharacters = RgxUrl.IsMatch(stringToCheck);

Ответ 2

Используйте String.IndexOfAny:

private static readonly char[] SpecialChars = "[email protected]#$%^&*()".ToCharArray();

...

int indexOf = text.IndexOfAny(SpecialChars);
if (indexOf == -1)
{
    // No special chars
}

Конечно, это будет внутренне замкнуто, но, по крайней мере, вам не нужно делать это в своем коде.

Ответ 3

Вместо того, чтобы проверять, содержит ли строка "специальные символы", часто лучше проверить, что все символы в строке являются "обычными" символами, другими словами используют белый список вместо черного списка. Причина в том, что существует много символов, которые можно было бы назвать "специальными символами", и если вы попытаетесь перечислить их все, что вы обязательно пропустите.

Поэтому вместо того, чтобы делать то, что вы просили, лучше проверить, например, что ваша строка соответствует регулярному выражению @"^\w+$" или тому, что вам нужно.

Ответ 4

Linq - это новый черный цвет.

string.Any(c => char.IsSymbol(c));

Для IsSymbol() действительные символы являются членами UnicodeCategory.

  • Буквенные символы, которые включают в себя набор математических буквенно-цифровых символов, а также символы, такие как ℅, № и ™
  • Числовые формы, такие как индексы и надстрочные индексы
  • Математические операторы и стрелки
  • Геометрические символы
  • Технические символы
  • Брайлевские модели
  • Dingbats

Edit:

Это не вызывает ВСЕ символы. Это может дополнять:

string.Any(c => !char.IsLetterOrDigit(c));

Ответ 5

Вот короткое решение для проверки специальных символов с использованием LINQ

private bool ContainsSpecialChars(string value)
{
        var list = new[] {"~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "+", "=", "\""};
        return list.Any(value.Contains);
}

Ответ 6

Я пытался добиться другого результата. Чтобы создать метод, который возвращает специальный символ, используемый для разделения определенной строки, скажем, 1 # 4 # 5, чтобы затем использовать его для разделения этой же строки. Поскольку система, которую я поддерживаю, построена так много разных людей, и в некоторых случаях я понятия не имею, какой шаблон (обычно там нет), мне многое помогло. И я пока не могу проголосовать.

public String Separator(){
      **String specialCharacters = "%[email protected]#$#^&*()?/>.<:;\\|}]{[_~`+=-" +"\"";**
      char[] specialCharactersArray = specialCharacters.toCharArray();
      char[] a = entrada.toCharArray();
      for(int i = 0; i<a.length; i++){
          for(int y=0; y < specialCharactersArray.length; i++){
              if(a[i] == specialCharactersArray[y]){
                  separator = String.valueOf(specialCharactersArray[y]);   
              }
          }
      }
      return separator;
    }

Спасибо, ребята.

Ответ 7

//apart from regex we can also use this
string input = Console.ReadLine();
            char[] a = input.ToCharArray();
            char[] b = new char[a.Length];
            int count = 0;
            for (int i = 0; i < a.Length; i++)
            {
                if (!Char.IsLetterOrDigit(a[i]))
                {
                    b[count] = a[i];
                    count++;
                }
            }
            Array.Resize(ref b, count);
            foreach(var items in b)
            {
                Console.WriteLine(items);
            }
            Console.ReadLine();
//it will display the special characters in the string input

Ответ 8

public static bool HasSpecialCharacters(string str)
{
  string specialCharacters = @"%[email protected]#$%^&*()?/>.<,:;'\|}]{[_~`+=-" +"\"";
  char[] specialCharactersArray = specialCharacters.ToCharArray();

  int index = str.IndexOfAny(specialCharactersArray);
  //index == -1 no special characters
  if (index == -1)
    return false;
  else
    return true;
}

Ответ 9

Используя PHP, вы можете попробовать:

if (preg_match("[^A-Za-z0-9]", $yourString) {
  //DO WHATEVER
}

Это вернет TRUE, если строка содержит что-либо, кроме буквы или цифры.

Надеюсь, что это поможет.

Ответ 10

Также...

foreach (char character in "some*[email protected]#@!#string")
        {
            if(!Char.IsLetterOrDigit(character))
            {
                //It is a special character.
            }
        }