Was ist der beste Weg, um nur Briefe in einer Regex zu entsprechen?
Frage
Ich würde wirklich gerne w verwenden, aber es passt auch zu Unterstrichen, also gehe ich mit [a-za-z], was sich unnötig ausführlich und Amerika zentriert fühlt. Gibt es einen besseren Weg, dies zu tun? So etwas wie [ w^_] (ich bezweifle, dass ich diese Syntax richtig gemacht habe)?
Lösung
Du könntest benutzen /[a-z]/i
oder /[[:alpha:]]/
genausogut. In der Tat, \w
Beinhaltet Zahlen, damit nicht einmal funktioniert.
Andere Tipps
Vielleicht meinst du /[[:alpha:]]/
? Sehen Perlre Für die Diskussion von POSIX -Charakterklassen.
Benutz einfach \p{L}
was "jeder Unicode -Buchstaben" bedeutet und arbeitet in Perl (arbeitet in Perl (/\p{L}/
). Sie müssen wahrscheinlich use utf8;
.
Die Übereinstimmung mit internationalen (dh Nicht-ASCII) -Farakteren ist irgendwie schwierig und könnte von vielen Dingen abhängen. Schauen Sie sich dieses Beispiel an:
#!perl -w
use strict;
use utf8;
my $string = "ä";
print "matched :alpha:\n" if $string =~ /[[:alpha:]]/;
print "matched ^\\W0-9_\n" if $string =~ /[^\W0-9_]/;
print "matched [a-zA-Z]\n" if $string =~ /[a-zA-Z]/;
print "matched [a-z]i\n" if $string =~ /[a-z]/i;
print "matched [A-z]\n" if $string =~ /[A-z]/;
Für mich führt dies dazu
matched :alpha:
Wenn Sie das entfernen use utf8
Dann entspricht keiner der regulären Ausdrücke.
Anschauen Diese sehr relevante Frage, es sieht so aus, als ob du es wahrscheinlich willst use utf8
und prüfen Sie Unicode :: Semantik.
Wenn Sie gerade ASCII -Zeichen verwenden, wird natürlich der oben genannte reguläre Ausdruck funktionieren.
[^\W0-9_]
# or
[[:alpha:]]
Siehe PERLDOC Perlre
Ein paar Optionen:
1. /[a-z]/i # case insensitive
2. /[A-Z]/i # case insensitive
3. /[A-z]/ # explicit range listing (capital 'A' to lowercase 'z')
4. /[[:alpha:]]/ # POSIX alpha character class
Ich empfehle, entweder den Fall-unempfindlich oder den wahren Weg zu verwenden /[a-zA-z]/
, Es sei denn, Sie haben eine bestimmte Sprachpräferenz im Sinn.
Notiz:
- Nummer 3 erfordert das Kapital "A" zuerst und dann in Kleinbuchstaben "Z" aufgrund der Reihenfolge der ASCII -Werte; Es funktioniert nicht, wenn Sie umgekehrt sind:
a-Z
. Ebenfalls: Diese Methode würde die Kriterien no-underscore nicht bestehen, da sie enthält [ \ ] ^ _ ` . - Nummer 4 stimmt mit diesen zusätzlichen Sprachfiguren überein, aber es stimmt auch überein:
ʹʺʻˍˎˏːˑˬˮ̀́
(plus viele andere)
Sie suchen nach Internationalisierung in Ihrem Regex? Dann müssen Sie so etwas tun, wie dieser Typ getan hat: JavaScript -Validierungsproblem mit internationalen Charakteren
explizit mit allen Mondsprachbuchstaben übereinstimmen :)