Wie um zu überprüfen, ob ein string nur Kleinbuchstaben enthalten?
Ich versuche zu überprüfen, ob meine Zeichenfolge mit einem Muster übereinstimmt. Das heißt, die vollständige Zeichenfolge geschrieben werden kann als das Muster.
Allerdings preg_match
zurück true
, wenn jede Teilfolge entspricht diesem Muster.
(E. g. preg_match("#[a-z]*#, "333k")
zurück 1
, die ich gar nicht will.
In diesem Beispiel würde ich eher stellen Sie sicher, die gesamte Zeichenfolge enthält nur kleine lateinische Buchstaben.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die start und Ende Marker
^
und$
bzw. zu Kennzeichnen Anfang und Ende der Zeichenfolge in Ihrem regulären Ausdruck Muster. Auf diese Weise können Sie stellen Sie den Ausdruck nur den gesamten string, nicht jede Art von substring. In deinem Fall würde es dann so Aussehen:Können Sie auch mit einer dieser Marker, die angeben, dass das Muster muss nur den Anfang oder das Ende der Zeichenfolge.
Beachten Sie, dass die
$
Anker passt auch vor dem Zeilenumbruch char-Sequenz, an das Ende des Strings (ja, auch wennm
MULTILINE-flag nicht angegeben). Sehen diese tests, die alle Rückkehr ein match:Können Sie "fix" in diesem
$
Verhalten mit derD
modifier. Die PCRE-compliantPCRE_DOLLAR_ENDONLY
modifier macht die$
Anker match am ganz am Ende der Zeichenfolge (ohne die position vor dem letzten Zeilenumbruch in den string).gleich
und entspricht einer ganzen Kette, die aus 1 oder mehr Ziffern und nicht mit
"123\n"
, aber es passt"123"
.Alternativ zum verankern der string-match am sehr Anfang und Ende der Zeichenfolge Sie sollten auch mit
\A
und\z
Anker.Den
\A
und\z
sind eindeutig Anfang und Ende von string-Anker in PHP regex (wie Ihr Verhalten hängt nicht von jeder regex-Modifizierer, selbst wenn Sie angeben, diem
MULTILINE-modifier, Sie werden immer behaupten string start/Ende-Positionen). Sehen Sie mehr auf PHP regex Anker in In der PHP-Dokumentation.Hüten Sie sich vor
\Z
obwohl:\Z
wird mit dem gesamten string vor dem letzten Einzel Zeilenumbruch, in der Erwägung, dass\z
passt nur auf die ganz am Ende der Zeichenfolge, das ist, nach all den Zeichen gibt es in der Zeichenfolge (siehe Was ist der Unterschied zwischen \z und \Z in einem regulären Ausdruck, und Wann und wie kann ich es verwenden?)Ich super-Liebe regex, aber nicht für diese Aufgabe-es ist unnötig Aufwand, da gibt es einen einzigen, direkten, nicht-regex entspricht. https://www.php.net/manual/en/function.ctype-lower.php
Code: (Demo)
Ausgabe:
p.s. Für den Datensatz, einen leeren string zurück
false
. Ich bin mir nicht sicher, dass Ihre logische Validierung Anforderungen für diese test-Einheit.