Jak mogę zweryfikować ciąg przy użyciu wyrażeń regularnych, aby zezwalać tylko na znaki alfanumeryczne?
(Nie chcę też dopuszczać żadnych spacji).
Użyj następującego wyrażenia:
^[a-zA-Z0-9]*$
to znaczy:
using System.Text.RegularExpressions;
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
...
}
W .NET 4.0 możesz użyć LINQ:
yourText.All
przestanie wykonywać i zwrócifalse
pierwszechar.IsLetterOrDigit
raporty,false
ponieważ umowaAll
nie może być wtedy wykonana .Uwaga! ta odpowiedź nie sprawdza ściśle znaków alfanumerycznych (zwykle są to AZ, az i 0-9). Ta odpowiedź zezwala na lokalne znaki, takie jak
åäö
.Aktualizacja 2018-01-29
Powyższa składnia działa tylko wtedy, gdy używasz pojedynczej metody, która ma pojedynczy argument prawidłowego typu (w tym przypadku
char
).Aby użyć wielu warunków, musisz napisać w ten sposób:
źródło
char.IsLetterOrDigit('ก')
zwrócitrue
. csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8caMożesz to łatwo zrobić za pomocą funkcji rozszerzającej zamiast wyrażenia regularnego ...
Za komentarz :) ...
źródło
char.IsLetterOrDigit
zamiast tego IsLetter + IsNumberChociaż myślę, że rozwiązanie oparte na wyrażeniach regularnych jest prawdopodobnie drogą, którą bym poszedł, miałbym pokusę, aby zawrzeć to w typie.
Teraz, gdy potrzebujesz zweryfikowanego ciągu, możesz mieć podpis metody, aby wymagał AlphaNumericString i wiedzieć, że jeśli go otrzymasz, jest prawidłowy (oprócz wartości null). Jeśli ktoś spróbuje przekazać niezatwierdzony ciąg, wygeneruje błąd kompilatora.
Możesz uzyskać bardziej wyszukane i zaimplementować wszystkie operatory równości lub jawne rzutowanie na AlphaNumericString ze zwykłego łańcucha, jeśli ci zależy.
źródło
static public implicit operator string
częśćMusiałem sprawdzić AZ, az, 0-9; bez wyrażenia regularnego (nawet jeśli OP pyta o wyrażenie regularne).
Łącząc tutaj różne odpowiedzi i komentarze oraz dyskusję z https://stackoverflow.com/a/9975693/292060 , ten test sprawdza litery lub cyfry, unikając liter w innych językach i unikając innych liczb, takich jak znaki ułamkowe.
źródło
^\w+$
pozwolia-zA-Z0-9_
Służy
^[a-zA-Z0-9]+$
do blokowania podkreślenia.Zauważ, że oba wymagają, aby ciąg nie był pusty. Używanie
*
zamiast+
zezwala na puste ciągi.źródło
^[\w-]+$
Aby sprawdzić, czy ciąg jest kombinacją liter i cyfr, możesz ponownie napisać odpowiedź @jgauffin w następujący sposób, używając .NET 4.0 i LINQ:
źródło
Ta sama odpowiedź jak tutaj .
Jeśli chcesz
A-z 0-9
sprawdzić ASCII inne niż regex , nie możesz użyć,char.IsLetterOrDigit()
ponieważ obejmuje to inne znaki Unicode.Możesz sprawdzić zakresy kodów znaków.
Poniższy tekst jest nieco bardziej szczegółowy, ale służy raczej do zrozumienia niż do kodowania golfa.
źródło
Na podstawie odpowiedzi Cletusa możesz utworzyć nowe rozszerzenie.
źródło
Radzę nie polegać na gotowym i wbudowanym kodzie w .NET frameworku, spróbować stworzyć nowe rozwiązanie .. to właśnie robię ..
źródło
char.IsNumber()
metody, ponieważ jest to kod wstępnie zbudowany?