Regex erlaubt nur Buchstaben und einige Zeichen

8

Ich versuche, eine Regex zu erstellen, die nur Groß- und Kleinbuchstaben und die Zeichen des Raums erlaubt, '-', ',' '.', '(', and ')'. Dies ist, was ich bis jetzt habe, aber aus irgendeinem Grund lässt es mich noch Zahlen eingeben

%Vor%

jede Hilfe wäre großartig! Vielen Dank.

    
newToRegex 22.12.2010, 15:38
quelle

4 Antworten

12

- ist speziell in der Zeichenklasse. Es wird verwendet, um einen Bereich zu definieren, wie Sie es mit a-z getan haben.

Um ein literales - zu finden, müssen Sie es entweder entschlüsseln oder so platzieren, dass es nicht als Bereichsoperator funktioniert:

%Vor%

oder

%Vor%

oder

%Vor%

und interessanterweise

%Vor%

Im letzten Fall ist - zwischen a-z und A-Z zwischen den beiden Zeichen, die die - umgeben (diejenige, die wir buchstäblich behandeln wollen), die z und A bereits ist in Bereichen beteiligt, wird die - buchstäblich wieder behandelt.

Von allen genannten Methoden wird die Escaping-Methode empfohlen , da sie Ihren Code leichter zu lesen und zu verstehen macht. Jeder, der das \ sieht, würde erwarten, dass ein Fluch beabsichtigt ist. Das Platzieren von - am Anfang (Ende) verursacht Probleme, wenn Sie später ein Zeichen vor (nach) es in der Zeichenklasse hinzufügen, ohne dabei das - zu verlassen und einen Bereich zu bilden.

    
codaddict 22.12.2010 15:42
quelle
3

Nun, es gibt ein Problem darin, dass -, als ein Bereich interpretiert wird, wie a-z , der alle Zeichen vom Leerzeichen bis zum Komma erlaubt. Escape das und mindestens einige der Fehler sollten behoben werden.

%Vor%

Genau genommen sollten Sie auch die . und () ebenfalls entziffern, da diese in regulären Ausdrücken eine besondere Bedeutung haben. Die Javascript-Regex-Engine (wo ich getestet habe) scheint sie wörtlich in einem [] -Kontext zu interpretieren, aber es ist immer viel besser, explizit zu sein.

%Vor%

Dies sollte jedoch 0-9 digits nicht zulassen, so dass Ihr tatsächlicher Code, der diesen regulären Ausdruck verwendet , wahrscheinlich ebenfalls ein Problem hat.

    
Matchu 22.12.2010 15:41
quelle
2

Der  -, in [a-zA-Z -,.()] beschreibt einen Bereich von   (0x20) bis , (0x2C). Und das entspricht [ !"#$%'()*+,] . Sie sollten das - entweder entfliehen oder es woanders platzieren, wo es nicht als Bereichsindikator interpretiert wird.

Aber das ist nicht die Ursache dieses Problems, da die Ziffern von 0x30 bis 0x39 sind.

    
Gumbo 22.12.2010 15:43
quelle
0

Ich habe das mit Javascript versucht und es funktioniert gut. Die anderen sind jedoch korrekt. Wenn in Javascript, überprüfen Sie, ob alles in Ordnung ist, sonst wird die Überprüfung überhaupt nicht passieren.

    
Nikolaos Kakouros 22.12.2010 15:48
quelle

Tags und Links