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.


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


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).


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]+$/

Dies entspricht nur lateinischen Zeichen.
QuotesBro


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.