Я хочу найти, содержит ли строка какие-либо специальные символы, такие как!, @, #, $,%, ^, &, *, (,).... и т.д.
Как я могу сделать это, не зацикливая все символы в строке?
Я хочу найти, содержит ли строка какие-либо специальные символы, такие как!, @, #, $,%, ^, &, *, (,).... и т.д.
Как я могу сделать это, не зацикливая все символы в строке?
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
}
Конечно, это будет внутренне замкнуто, но, по крайней мере, вам не нужно делать это в своем коде.
Вместо того, чтобы проверять, содержит ли строка "специальные символы", часто лучше проверить, что все символы в строке являются "обычными" символами, другими словами используют белый список вместо черного списка. Причина в том, что существует много символов, которые можно было бы назвать "специальными символами", и если вы попытаетесь перечислить их все, что вы обязательно пропустите.
Поэтому вместо того, чтобы делать то, что вы просили, лучше проверить, например, что ваша строка соответствует регулярному выражению @"^\w+$"
или тому, что вам нужно.
Linq - это новый черный цвет.
string.Any(c => char.IsSymbol(c));
Для IsSymbol() действительные символы являются членами UnicodeCategory.
Edit:
Это не вызывает ВСЕ символы. Это может дополнять:
string.Any(c => !char.IsLetterOrDigit(c));
Вот короткое решение для проверки специальных символов с использованием LINQ
private bool ContainsSpecialChars(string value)
{
var list = new[] {"~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "+", "=", "\""};
return list.Any(value.Contains);
}
Я пытался добиться другого результата. Чтобы создать метод, который возвращает специальный символ, используемый для разделения определенной строки, скажем, 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
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;
}
Используя PHP, вы можете попробовать:
if (preg_match("[^A-Za-z0-9]", $yourString) {
//DO WHATEVER
}
Это вернет TRUE, если строка содержит что-либо, кроме буквы или цифры.
Надеюсь, что это поможет.
Также...
foreach (char character in "some*[email protected]#@!#string")
{
if(!Char.IsLetterOrDigit(character))
{
//It is a special character.
}
}