Я хочу найти, содержит ли строка какие-либо специальные символы, такие как!, @, #, $,%, ^, &, *, (,) .... и т. Д.Как найти, содержит ли строка какие-либо специальные символы?
Как я могу сделать это без зацикливания всех символов в строке?
Я хочу найти, содержит ли строка какие-либо специальные символы, такие как!, @, #, $,%, ^, &, *, (,) .... и т. Д.Как найти, содержит ли строка какие-либо специальные символы?
Как я могу сделать это без зацикливания всех символов в строке?
Regex RgxUrl = new Regex("[^a-z0-9]");
blnContainsSpecialCharacters = RgxUrl.IsMatch(stringToCheck);
Использование String.IndexOfAny
:
private static readonly char[] SpecialChars = "[email protected]#$%^&*()".ToCharArray();
...
int indexOf = text.IndexOfAny(SpecialChars);
if (indexOf == -1)
{
// No special chars
}
Конечно, это будет цикл внутри - но, по крайней мере, вы не должны делать это в вашем коде.
Эй, Джон, как вы будете реализовывать мнение Байка? – Manish
@Manish: Учитывая, что у вас, вероятно, будет широкий диапазон символов для белого списка, регулярное выражение - это, вероятно, путь. –
Вместо проверки, если строка содержит «специальные символы» часто лучше, чтобы проверить, что все символы в строке являются «обычными» символами, другими словами, используйте белый список вместо черного списка. Причина в том, что существует много символов, которые можно было бы назвать «особыми символами», и если вы попытаетесь перечислить их все, что вы обязательно пропустите.
Так что вместо того, чтобы делать то, что вы просили, лучше проверить, например, что ваша строка соответствует регулярному выражению @"^\w+$"
или что вам нужно.
Ницца мысль ... !! – Manish
@Bubblewrap: Я предложил использовать регулярное выражение с белым списком. Это не правильный ответ на вопрос? Проблема с методом черного списка - это бит, где он пишет «и т. Д.». Компьютеры не могут догадаться, что вы имеете в виду, и написать список всех специальных символов - это неправильный подход к решению этой проблемы. –
IMO не является. Не зная мотивации вопроса, вы не можете сказать, что использование белого списка является лучшей (или даже действительной) альтернативой использованию IndexOfAny. И вопрос был, как я прочитал, особенно о черных списках. – Bubblewrap
Использование PHP, вы можете попробовать:
if (preg_match("[^A-Za-z0-9]", $yourString) {
//DO WHATEVER
}
Это возвратит TRUE, если строка содержит ничего, кроме буквы или цифры.
Надеюсь, это поможет.
Вопрос помечен C#. –
Не в C#, но все же дал мне необходимое регулярное выражение. :) – Manish
@Manish: Ну, это * a * regex - но не тот, который точно соответствует вопросу. Если бы вы сказали: «Я просто хочу включать буквенно-цифровые символы, а не акценты и т. Д.», Тогда это было бы другим вопросом. –
Также ...
foreach (char character in "some*[email protected]#@!#string")
{
if(!Char.IsLetterOrDigit(character))
{
//It is a special character.
}
}
-1, в частности, сказано в вопросе БЕЗ ИСПОЛЬЗОВАНИЯ LOOP ... – Manish
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;
}
Я пытался добиться другого результата. Чтобы создать метод, который возвращает специальный символ, используемый для разделения определенной строки, скажем, 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;
}
Спасибо, ребята.
//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
Вот краткое решение для проверки специальных символов с помощью LINQ
private bool ContainsSpecialChars(string value)
{
var list = new[] {"~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "+", "=", "\""};
return list.Any(value.Contains);
}
Linq это новый черный.
string.Any(c => char.IsSymbol(c));
Для IsSymbol(), действительные символы являются членами UnicodeCategory.
Edit:
Это не поймать все символы. Это может дополнять:
string.Any(c => !char.IsLetterOrDigit(c));
У вас пропустили A-Z .. – Manish
это примет 'à', это специальный символ для OP? (конечно, это не так, ОП уже принял ответ) –