Regulärer Ausdruck, der nur alphabetischen Zeichen entspricht

157

Ich habe mich gefragt, ob ich einen regulären Ausdruck bekommen könnte, der mit einer Zeichenfolge übereinstimmt, die nur alphabetische Zeichen enthält, und das allein.

Steffan Harris
quelle
2
So etwas wie / ^ [a-zA-Z] + $ / sollte funktionieren.
Julian Go
10
Entspricht àein alphabetisches Zeichen Ihrer Definition? Welche Sprache benutzt du?
Tim Pietzcker
2
sollte eine leere Zeichenfolge übereinstimmen?
20.
Nein, eine leere Zeichenfolge sollte nicht übereinstimmen
Steffan Harris
Ein wichtiger Hinweis: Sie haben keine Sprache oder kein Tool angegeben, in dem Sie den von Ihnen gewünschten regulären Ausdruck verwenden möchten. Obwohl die Prinzipien der regulären Ausdrücke universell gleich sind, ist die Syntax nicht überall gleich. Sie sollten angeben, wo Sie es verwenden möchten.
Sergiol

Antworten:

186

Sie können eine dieser beiden Varianten verwenden:

/^[A-Z]+$/i
/^[A-Za-z]+$/

um eine Eingabezeichenfolge von ASCII-Alphabeten abzugleichen.

  • [A-Za-z] stimmt mit allen Alphabeten überein (sowohl Klein- als auch Großbuchstaben).
  • ^und $wird sicherstellen, dass nichts als diese Alphabete übereinstimmen.

Code:

preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m);
var_dump($m);

Ausgabe:

array(0) {
}

Der Testfall bezieht sich auf den Kommentar von OP, dass er nur dann übereinstimmen möchte, wenn 1 oder mehr Alphabete in der Eingabe vorhanden sind. Wie Sie im Testfall sehen können, sind Übereinstimmungen fehlgeschlagen, weil ^die Eingabezeichenfolge vorhanden war abcAbc^Xyz.

Hinweis: Bitte beachten Sie, dass die obige Antwort nur mit ASCII-Alphabeten und nicht mit Unicode-Zeichen übereinstimmt. Wenn Sie mit Unicode-Buchstaben übereinstimmen möchten, verwenden Sie:

/^\p{L}+$/u

Hier \p{L}passt jede Art von Brief aus jeder Sprache

Anubhava
quelle
22
In einigen Dialekten stimmt [Az] mit den ASCII-Interpunktionswerten überein, die zwischen 'Z' und 'a' auftreten, insbesondere '[', '\', ']', '^', '-' und '' ', as sowie 'A' bis 'Z' und 'a' bis 'z'.
Lee
Was ich wirklich wollte, ist eine Möglichkeit, meine Zeichenfolge nur dann abzugleichen, wenn sie alphabetische Zeichen enthält. Wenn sie ein nicht alphabetisches Zeichen enthält, sollte sie nicht übereinstimmen.
Steffan Harris
7
@ Lee: Nicht einige. Alle von ihnen. Diese Regex ist in ihrem aktuellen Zustand falsch.
Tim Pietzcker
7
\w is shorthand for A-Za-z- nicht wirklich, \wist eine Abkürzung für[a-zA-Z0-9_]
Anubhava
1
Guter Punkt @ jpmc26. Ich habe meine Antwort bearbeitet, um meinen ursprünglichen Fehler zu beseitigen.
Anubhava
55

Wenn Sie nicht-ASCII-alphabetische Zeichen einfügen müssen und Ihre Regex-Variante Unicode unterstützt, dann

\A\pL+\z

wäre die richtige Regex.

Einige Regex-Engines unterstützen diese Unicode-Syntax nicht, erlauben jedoch, dass die \walphanumerische Kurzform auch mit Nicht-ASCII-Zeichen übereinstimmt. In diesem Fall können Sie alle Alphabete erhalten, indem Sie Ziffern und Unterstriche \wwie folgt abziehen :

\A[^\W\d_]+\z

\AÜbereinstimmungen am Anfang der Zeichenfolge, \zam Ende der Zeichenfolge ( ^und $auch am Anfang / Ende von Zeilen in einigen Sprachen wie Ruby oder wenn bestimmte Regex-Optionen festgelegt sind).

Tim Pietzcker
quelle
38
+1 für das Nicht-Betrachten des englischen Alphabets als das einzige Alphabet
srcspider
7
+1, wie oben. Englisch ist nicht das einzige Alphabet und viele Leute schreiben ihren Namen mit Nicht-ASCII-Zeichen, um ihn richtig auszudrücken.
Ben Barkay
22

Dies entspricht einem oder mehreren alphabetischen Zeichen:

/^[a-z]+$/

Sie können die Groß- und Kleinschreibung nicht berücksichtigen, indem Sie Folgendes verwenden:

/^[a-z]+$/i

oder:

/^[a-zA-Z]+$/
stevecomrie
quelle
Dies entspricht nur lateinischen Zeichen.
QuotesBro
13

In Ruby und anderen Sprachen, die POSIX-Zeichenklassen in Klammerausdrücken unterstützen, können Sie einfach Folgendes tun:

/\A[[:alpha:]]+\z/i

Das stimmt mit Alpha-Zeichen in allen Unicode-Alphabet-Sprachen überein. Kinderleicht.

Weitere Informationen: http://en.wikipedia.org/wiki/Regular_expression#Character_classes http://ruby-doc.org/core-2.0/Regexp.html

jshkol
quelle
1
Und um alles außer den Zeichen (die nicht dokumentiert waren) zu verwenden [^[:alpha]].
Spyle
6

[a-zA-Z] sollte das ganz gut machen.

Sie können auf den Spickzettel verweisen .

Frazell Thomas
quelle
2
Ja, aber ich würde auch, wenn meine Zeichenfolge ein Nicht-Wort-Zeichen enthalten würde, immer noch übereinstimmen
Steffan Harris