Reszta albo sprawdza spację, ale nie białą spację, albo ma negację w niewłaściwym miejscu, aby faktycznie zanegować.
Zachary Scott
\ w również łapie podkreślenia - czyli znak niealfanumeryczny
Tudor Constantin
Aha! Zmodyfikuję - tego nie wiedziałem. Spodziewam się, że działa to inaczej dla różnych silników, ale równie dobrze może dać OP bezpieczną odpowiedź.
Luke Sneeringer
2
Głos odrzucony, ponieważ nie spowoduje to przechwycenia znaków spoza alfabetu łacińskiego ani „specjalnych” znaków łacińskich.
damian
17
Jeśli chcesz traktować akcentowane znaki łacińskie (np. À Ñ) jak zwykłe litery (tzn. Unikaj też ich dopasowywania), musisz również uwzględnić w swoim wyrażeniu regularnym odpowiedni zakres Unicode ( \ u00C0- \ u00FF ), więc wyglądałoby tak:
/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
^ neguje to, co następuje
a-zA-Z dopasowuje duże i małe litery
\d dopasowuje cyfry
\s dopasowuje białe znaki (jeśli chcesz dopasować tylko spacje, zamień to na spację)
: pasuje do dwukropka
\u00C0-\u00FF pasuje do zakresu Unicode dla akcentowanych znaków łacińskich.
nb. Dopasowanie zakresu Unicode może nie działać dla wszystkich silników regex, ale powyższe z pewnością działa w Javascript (jak widać na tym piórze w Codepen).
nb2. Jeśli nie przejmujesz się dopasowywaniem podkreśleń, możesz zastąpić a-zA-Z\dje \wliterami, cyframi i podkreśleniami.
Ten zakres zawiera znaki, które nie są alfanumeryczne (U + 00D7 i U + 00F7) i wyklucza wiele poprawnych znaków akcentowanych z języków innych niż zachodnie, takich jak polski, czeski, wietnamski itp.
Głos odrzucony, ponieważ nie spowoduje to przechwycenia znaków spoza alfabetu łacińskiego ani „specjalnych” znaków łacińskich.
damian
15
Łatwo jest odrzucić odpowiedź, a jeszcze trudniej przekazać tablicy konstruktywne informacje, np. Jak można wtedy wyłapać znaki spoza alfabetu łacińskiego lub „specjalne” znaki łacińskie? Z tego samego powodu, według moich obliczeń, obniżyłeś 3 odpowiedzi z tego samego powodu i moim zdaniem za niewielką poprawkę. Na przykład jestem tutaj, aby znaleźć wyrażenie regularne dla dokładnie tego, co jest omówione w tych odpowiedziach. Nie obchodzą mnie zestawy znaków, które nie będą używane w mojej aplikacji. Prawo malejących przychodów.
1
Aaron może być „drobną poprawką” dla obywatela USA, ale bardzo istotny dla… reszty tej planety.
Jest to jedyna odpowiedź, która poprawnie radzi sobie z alfabetem akcentowanym przez Unicode. Niestety, nie wszystkie silniki wyrażeń regularnych obsługują tę funkcję (nawet Python nie ma go w wersji 3.8, mimo że jego silnik regex jest rzekomo oparty na PCRE).
tripleee
1
Usunę Pythona z odpowiedzi, myślałem, że to przetestowałem, ale najwyraźniej nie. Dzięki za zwrócenie uwagi.
Wydaje się, że to powtórzenie zaakceptowanej odpowiedzi z 2011 roku. Zakotwiczenia ^i $ograniczają ją do dopasowania całych linii, a *kwantyfikator oznacza, że dopasowuje również puste linie.
tripleee
0
W JavaScript:
/[^\w_]/g
^negacja, czyli wybierz wszystko, czego nie ma w następującym zestawie
\w dowolny znak słowa (tj. dowolny znak alfanumeryczny plus podkreślenie)
_ zaneguj podkreślenie, ponieważ jest uważane za znak „słowa”
Przykład użycia - const nonAlphaNumericChars = /[^\w_]/g;
/[^a-zA-Z0-9\s\:]*/
Odpowiedzi:
źródło
\d
i\s
są rozszerzeniami Perl, które zazwyczaj nie są obsługiwane przez starsze narzędzia, takie jakgrep
,sed
,tr
,lex
, itpTo powinno wystarczyć:
źródło
Jeśli chcesz traktować akcentowane znaki łacińskie (np. À Ñ) jak zwykłe litery (tzn. Unikaj też ich dopasowywania), musisz również uwzględnić w swoim wyrażeniu regularnym odpowiedni zakres Unicode ( \ u00C0- \ u00FF ), więc wyglądałoby tak:
/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
^
neguje to, co następujea-zA-Z
dopasowuje duże i małe litery\d
dopasowuje cyfry\s
dopasowuje białe znaki (jeśli chcesz dopasować tylko spacje, zamień to na spację):
pasuje do dwukropka\u00C0-\u00FF
pasuje do zakresu Unicode dla akcentowanych znaków łacińskich.nb. Dopasowanie zakresu Unicode może nie działać dla wszystkich silników regex, ale powyższe z pewnością działa w Javascript (jak widać na tym piórze w Codepen).
nb2. Jeśli nie przejmujesz się dopasowywaniem podkreśleń, możesz zastąpić
a-zA-Z\d
je\w
literami, cyframi i podkreśleniami.źródło
Spróbuj tego:
[^a-zA-Z0-9 :]
Przykład JavaScript:
"!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")
Zobacz przykład online:
http://jsfiddle.net/vhMy8/
źródło
[^a-zA-Z0-9 :]
można zastąpić[^\w:]
Bez znaków alfanumerycznych, spacji lub „_”.
var reg = /[^\w\s)]|[_]/g;
źródło
Jeśli masz na myśli „znaki niealfanumeryczne”, spróbuj użyć tego:
var reg =/[^a-zA-Z0-9]/g //[^abc]
źródło
To wyrażenie regularne działa w językach C # , PCRE i Go, żeby wymienić tylko kilka.
Z tego, co mówi RegexBuddy, nie działa dla JavaScript w Chrome . Ale jest na to już przykład.
Ta główna część to:
\p{L}
który reprezentuje
\p{L}
lub\p{Letter}
dowolny rodzaj listu z dowolnego języka. "Samo pełne wyrażenie regularne:
[^\w\d\s:\p{L}]
Przykład: https://regex101.com/r/K59PrA/2
źródło
Spróbuj dodać to:
^[^a-zA-Z\d\s:]*$
To zadziałało dla mnie ... :)
źródło
^
i$
ograniczają ją do dopasowania całych linii, a*
kwantyfikator oznacza, że dopasowuje również puste linie.W JavaScript:
/[^\w_]/g
^
negacja, czyli wybierz wszystko, czego nie ma w następującym zestawie\w
dowolny znak słowa (tj. dowolny znak alfanumeryczny plus podkreślenie)_
zaneguj podkreślenie, ponieważ jest uważane za znak „słowa”Przykład użycia -
const nonAlphaNumericChars = /[^\w_]/g;
źródło