Chcę sprawdzić, czy ciąg znaków zawiera którykolwiek ze znaków specjalnych, takich jak!, @, #, $,%, ^, &, *, (,) .... itd.Jak ustalić, czy ciąg zawiera któryś ze znaków specjalnych?
Jak mogę to zrobić bez zapętlenia wszystkich znaków w łańcuchu?
Chcę sprawdzić, czy ciąg znaków zawiera którykolwiek ze znaków specjalnych, takich jak!, @, #, $,%, ^, &, *, (,) .... itd.Jak ustalić, czy ciąg zawiera któryś ze znaków specjalnych?
Jak mogę to zrobić bez zapętlenia wszystkich znaków w łańcuchu?
Regex RgxUrl = new Regex("[^a-z0-9]");
blnContainsSpecialCharacters = RgxUrl.IsMatch(stringToCheck);
Zastosowanie String.IndexOfAny
:
private static readonly char[] SpecialChars = "[email protected]#$%^&*()".ToCharArray();
...
int indexOf = text.IndexOfAny(SpecialChars);
if (indexOf == -1)
{
// No special chars
}
Oczywiście, że pętla będzie wewnętrznie - ale przynajmniej nie trzeba to zrobić w kodzie.
Hej Jon, jak zrealizujesz Myślenie Byersa? – Manish
@Manish: Biorąc pod uwagę, że najprawdopodobniej masz szeroki wachlarz znaków do dodania do białej listy, prawdopodobnie skorzystasz z regex. –
Zamiast sprawdzenie czy ciąg zawiera znaki specjalne „” To często lepiej sprawdzić, czy wszystkie znaki w ciągu są „zwykłe” znaków, innymi słowy używać białej listy zamiast czarnej listy. Powodem jest to, że istnieje wiele postaci, które można by uważać za "znaki specjalne", a jeśli spróbujesz je wymienić, na pewno je przegapisz.
Zamiast robić to, o co prosiłeś, lepiej byłoby sprawdzić, czy twój ciąg pasuje do wyrażeń regularnych @"^\w+$"
, czy cokolwiek, czego potrzebujesz.
Przyjemna myśl ... !! – Manish
@Bubblewrap: Zasugerowałem użycie wyrażenia regularnego z białą listą. Czy nie jest to poprawna odpowiedź na pytanie? Problem z metodą czarnej listy to ten, w którym pisze "etcetera ...". Komputery nie mogą odgadnąć, co masz na myśli, a napisanie listy wszystkich znaków specjalnych jest IMHO niewłaściwym sposobem podejścia do tego problemu. –
IMO to nie jest. Nie znając motywacji stojącej za tym pytaniem, nie można powiedzieć, że używanie białej listy jest lepszą (lub nawet ważną) alternatywą dla korzystania z IndexOfAny. Pytanie brzmiało, kiedy to czytałem, a konkretnie o czarnych listach. – Bubblewrap
Korzystanie z PHP, można spróbować:
if (preg_match("[^A-Za-z0-9]", $yourString) {
//DO WHATEVER
}
ten powróci TRUE jeśli ciąg zawiera coś innego niż litery lub liczby.
Mam nadzieję, że to pomoże.
Pytanie zostało oznaczone jako C#. –
Nie w języku C#, ale nadal dało mi wymagane wyrażenie regularne. :) – Manish
@Manish: Cóż, to * a * regex - ale nie takie, które dokładnie pasuje do pytania. Gdybyś powiedział: "Chcę tylko dołączyć znaki alfanumeryczne, bez akcentów itp.", To byłaby to inna sprawa. –
także ...
foreach (char character in "some*[email protected]#@!#string")
{
if(!Char.IsLetterOrDigit(character))
{
//It is a special character.
}
}
-1, konkretnie powiedziane, BEZ UŻYWANIA PĘTLI ... – 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;
}
starałem się osiągnąć inny wynik. Aby utworzyć metodę, która zwraca znak specjalny użyty do oddzielenia określonego ciągu, powiedz 1 # 4 # 5, aby użyć go do podziału tego samego ciągu znaków. Ponieważ system, który utrzymuję, jest zbudowany przez tak wiele różnych osób, aw niektórych przypadkach nie mam pojęcia, który jest wzór (zazwyczaj nie ma), to pomogło mi bardzo wiele. I nie mogę jeszcze głosować.
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;
}
Dziękuję wam.
//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
Oto krótki rozwiązanie do sprawdzania znaków specjalnych przy użyciu LINQ
private bool ContainsSpecialChars(string value)
{
var list = new[] {"~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "+", "=", "\""};
return list.Any(value.Contains);
}
Linq to nowa czerń.
string.Any(c => char.IsSymbol(c));
Na IsSymbol(), ważne symbole są członkami UnicodeCategory.
Edit:
nie złapać wszystkie znaki. To może uzupełnić:
string.Any(c => !char.IsLetterOrDigit(c));
Czy przegapiłeś A-Z .. – Manish
to zaakceptuje "à", czy jest to specjalny znak dla PO? (oczywiście, że nie, OP już zaakceptował odpowiedź) –