Regex, jedes nicht alphanumerische Zeichen außer Leerzeichen oder Doppelpunkt


131

Wie kann ich das überall machen?

Grundsätzlich versuche ich, alle Arten von verschiedenen Zeichen wie kaufmännisches Und, Semikolon, Dollarzeichen usw. abzugleichen.


13
/[^a-zA-Z0-9\s\:]*/
Kelly

Antworten:


245
[^a-zA-Z\d\s:]
  • \ d - numerische Klasse
  • \ s - Leerzeichen
  • a-zA-Z - stimmt mit allen Buchstaben überein
  • ^ - negiert sie alle - so erhalten Sie - nicht numerische Zeichen, keine Leerzeichen und keine Doppelpunkte

Das habe ich mir auch angesehen :)) - Ich muss Ihre perfekte Antwort fördern
Tudor Constantin

6
Das einzige, was ich gefunden habe, ist, dass dadurch Sonderzeichen wie é oder ã entfernt werden. Ich würde [^ \ w \ d \ s:] bevorzugen.
Eric Belair

5
Herabgestuft, da dadurch weder nicht-lateinische Zeichen noch "spezielle" lateinische Zeichen erfasst werden.
Damian

\dund \ssind Perl - Erweiterungen , die sind in der Regel nicht von den älteren Tool unterstützt wie grep, sed, tr, lexetc.
tripleee

38

Dies sollte es tun:

[^a-zA-Z\d\s:]

1
Der Rest sucht entweder nach Leerzeichen, aber nicht nach Leerzeichen oder hat die Negation an der falschen Stelle, um sie tatsächlich zu negieren.
Zachary Scott

\ w fängt auch Unterstriche - was ein nicht alphanumerischer Charakter ist
Tudor Constantin

Aha! Ich werde modifizieren - das wusste ich nicht. Ich erwarte, dass es für verschiedene Motoren unterschiedlich funktioniert, könnte aber genauso gut dem OP die sichere Antwort geben.
Luke Sneeringer

2
Herabgestuft, da dadurch weder nicht-lateinische Zeichen noch "spezielle" lateinische Zeichen erfasst werden.
Damian

16

Wenn Sie lateinische Zeichen mit Akzent (z. B. à Ñ) als normale Buchstaben behandeln möchten (dh vermeiden, dass sie auch übereinstimmen), müssen Sie auch den entsprechenden Unicode-Bereich ( \ u00C0- \ u00FF ) in Ihre Regex aufnehmen würde so aussehen:

/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
  • ^ negiert was folgt
  • a-zA-Z stimmt mit Groß- und Kleinbuchstaben überein
  • \d stimmt mit den Ziffern überein
  • \s stimmt mit Leerzeichen überein (wenn Sie nur Leerzeichen abgleichen möchten, ersetzen Sie diese durch ein Leerzeichen)
  • : entspricht einem Doppelpunkt
  • \u00C0-\u00FF Entspricht dem Unicode-Bereich für lateinische Zeichen mit Akzent.

nb. Die Unicode-Bereichsanpassung funktioniert möglicherweise nicht für alle Regex-Engines, aber das oben Genannte funktioniert sicherlich in Javascript (wie in diesem Stift auf Codepen zu sehen).

nb2. Wenn Sie sich über passende Unterstrichen nicht gestört sind, könnten Sie ersetzen a-zA-Z\dmit \w, die Buchstaben, Ziffern übereinstimmt und Unterstrichen.


Dieser Bereich enthält einige Zeichen, die nicht alphanumerisch sind (U + 00D7 und U + 00F7), und schließt viele gültige Zeichen mit Akzent aus nicht-westlichen Sprachen wie Polnisch, Tschechisch, Vietnamesisch usw. aus
Tripleee

1
Upvoted für die Beschreibung jedes Teils der RegEx.
Morajabi

14

Versuche dies:

[^a-zA-Z0-9 :]

JavaScript-Beispiel:

"!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")

Sehen Sie sich ein Online-Beispiel an:

http://jsfiddle.net/vhMy8/


3
Herabgestuft, da dadurch weder nicht-lateinische Zeichen noch "spezielle" lateinische Zeichen erfasst werden.
Damian

14
Es ist leicht, eine Antwort herunterzustimmen, und noch schwieriger, konstruktive Informationen an die Tafel zu liefern, z. B. wie fängt man dann nicht-lateinische Zeichen oder "spezielle" lateinische Zeichen ab? Nach meiner Zählung bis hierher haben Sie aus demselben Grund 3 Antworten abgelehnt, und meiner Meinung nach für eine eher geringfügige Änderung. Zum Beispiel bin ich hier, um einen regulären Ausdruck für genau das zu finden, was in diesen Antworten besprochen wird. Zeichensätze, die in meiner Anwendung nicht verwendet werden, interessieren mich nicht. Gesetz des abnehmenden Ertrags.

Aaron mag für einen US-Bürger eine "kleine Veränderung" sein, aber für ... den Rest dieses Planeten von hoher Relevanz.
Michael K. Borregaard

4

Keine alphanumerischen Zeichen, Leerzeichen oder '_'.

var reg = /[^\w\s)]|[_]/g;

4

Wenn Sie "nicht alphanumerische Zeichen" meinen, versuchen Sie Folgendes:

var reg =/[^a-zA-Z0-9]/g      //[^abc]

1

Diese Regex funktioniert für C # , PCRE und Go, um nur einige zu nennen.

Es funktioniert nicht für JavaScript in Chrome, wie RegexBuddy sagt. Dafür gibt es hier aber schon ein Beispiel.

Dieser Hauptteil davon ist:

\p{L}

die einen Brief aus einer beliebigen Sprache darstellt \p{L}oder. "\p{Letter}


Die vollständige Regex selbst: [^\w\d\s:\p{L}]

Beispiel: https://regex101.com/r/K59PrA/2


Dies ist hier die einzige Antwort, die richtig mit Unicode-akzentuierten Alphabeten umgeht. Leider unterstützen nicht alle Regex-Engines diese Funktion (selbst Python fehlt sie ab Version 3.8, obwohl die Regex-Engine angeblich PCRE-basiert ist).
Tripleee

1
Ich werde Python aus der Antwort entfernen, ich dachte, ich hätte das getestet, aber anscheinend nicht. Vielen Dank für den Hinweis.
Ste

0

Versuchen Sie Folgendes hinzuzufügen:

^[^a-zA-Z\d\s:]*$

Das hat bei mir funktioniert ... :)


Dies scheint die akzeptierte Antwort aus dem Jahr 2011 zu wiederholen. Die Anker ^und $beschränken sie auf ganze Zeilen, und der *Quantifizierer bedeutet, dass sie auch mit leeren Zeilen übereinstimmen.
Tripleee

0

In JavaScript:

/[^\w_]/g

^Negation, dh wählen Sie etwas aus, das nicht im folgenden Satz enthalten ist

\w ein beliebiges Wortzeichen (dh ein beliebiges alphanumerisches Zeichen plus Unterstrich)

_ negiere den Unterstrich, da er als Wortzeichen betrachtet wird

Anwendungsbeispiel - const nonAlphaNumericChars = /[^\w_]/g;

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.