Ich habe Probleme beim Überprüfen von PHP, ob ein Wert eine der folgenden Kombinationen ist
- Buchstaben (Groß- oder Kleinbuchstaben)
- Zahlen (0-9)
- Unterstrich (_)
- Bindestrich (-)
- Punkt (.)
- kein Platz! oder andere Zeichen
einige Beispiele:
- OK: "screen123.css"
- OK: "screen-new-file.css"
- OK: "screen_new.js"
- NICHT OK: "Bildschirm neue Datei.css"
Ich denke, ich brauche dafür einen regulären Ausdruck, da ich einen Fehler auslösen muss, wenn eine Give-Zeichenfolge andere Zeichen als die oben genannten enthält.
Antworten:
Das gewünschte Muster ist ungefähr so ( siehe auf rubular.com ):
Erläuterung:
^
ist der Anfang des Linienankers$
ist das Ende des Linienankers[...]
ist eine Zeichenklassendefinition*
ist eine Wiederholung von "null oder mehr"Beachten Sie, dass der Literalstrich
-
das letzte Zeichen in der Zeichenklassendefinition ist, andernfalls hat er eine andere Bedeutung (dh einen anderen Bereich). Das hat.
auch außerhalb der Zeichenklassendefinitionen eine andere Bedeutung, aber innerhalb ist es nur ein Literal.
Verweise
In PHP
Hier ist ein Ausschnitt, der zeigt, wie Sie dieses Muster verwenden können:
Die obigen Drucke ( wie auf ideone.com zu sehen ):
Beachten Sie, dass das Muster etwas anders ist, wenn Sie
\w
stattdessen verwenden. Dies ist die Zeichenklasse für "Wortzeichen".API-Referenzen
preg_match
Hinweis zur Spezifikation
Dies scheint Ihrer Spezifikation zu folgen, aber beachten Sie, dass dies mit Dingen wie
.....
usw. übereinstimmt , die möglicherweise Ihren Wünschen entsprechen oder nicht. Wenn Sie genauer angeben können, mit welchem Muster Sie übereinstimmen möchten, ist der reguläre Ausdruck etwas komplizierter.Der obige reguläre Ausdruck stimmt auch mit der leeren Zeichenfolge überein. Wenn Sie mindestens ein Zeichen benötigen, verwenden Sie
+
(eins oder mehr) anstelle von*
(null oder mehr) für die Wiederholung.In jedem Fall können Sie Ihre Spezifikation weiter präzisieren (hilft immer beim Stellen von Regex-Fragen), aber hoffentlich können Sie auch lernen, wie Sie das Muster anhand der obigen Informationen selbst schreiben.
quelle
^/([a-zA-Z0-9._-]*\.html)$
/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2,}[a-zA-Z0-9^]$/
false
zu leeren rohen String-Literalen. Spielplatz . Verwenden Sie die unten stehende Lösung von @ nonopolarity .Sie können verwenden
Das
+
soll sicherstellen, dass es mindestens 1 Zeichen hat. Benötigen Sie das^
und$
, um den Anfang und das Ende zu bezeichnen, andernfalls, wenn die Zeichenfolge eine Übereinstimmung in der Mitte hat, z. B.@@@@xyz%%%%
dann ist es immer noch eine Übereinstimmung.quelle
-
ersten in das Set ein, um die Definition eines Bereichs zu vermeiden. Und\w
deckt alphanumerische Zeichen und Unterstriche ab. Also brauchst du[\w.-]+
.Um Ihr Muster tatsächlich abzudecken, dh gültige Dateinamen gemäß Ihren Regeln, denke ich, dass Sie etwas mehr brauchen. Beachten Sie, dass dies aus Systemsicht nicht mit legalen Dateinamen übereinstimmt . Das wäre systemabhängig und liberaler in dem, was es akzeptiert. Dies soll Ihren akzeptablen Mustern entsprechen.
Erläuterung:
^
Passen Sie den Anfang einer Zeichenfolge an. Dies (plus die Endübereinstimmung) zwingt die Zeichenfolge, dem genauen Ausdruck zu entsprechen, und enthält nicht nur einen Teilstring, der mit dem Ausdruck übereinstimmt.([a-zA-Z0-9]+[_-])*
Null oder mehr Vorkommen von einem oder mehreren Buchstaben oder Zahlen, gefolgt von einem Unterstrich oder Bindestrich. Dies führt dazu, dass alle Namen, die einen Bindestrich oder Unterstrich enthalten, Buchstaben oder Zahlen enthalten.[a-zA-Z0-9]+
Ein oder mehrere Buchstaben oder Zahlen. Dies umfasst alle Namen, die keinen Unterstrich oder Bindestrich enthalten.\.
Eine wörtliche Periode (Punkt). Erzwingt, dass der Dateiname eine Erweiterung hat, und lässt durch Ausschluss vom Rest des Musters nur den Zeitraum zwischen dem Namen und der Erweiterung zu. Wenn Sie mehr als eine Erweiterung möchten, die mit derselben Technik wie für den Bindestrich / Unterstrich behandelt werden kann, nur am Ende.[a-zA-Z0-9]+
Ein oder mehrere Buchstaben oder Zahlen. Die Erweiterung muss mindestens ein Zeichen lang sein und darf nur Buchstaben und Zahlen enthalten. Dies ist typisch, aber wenn Sie Unterstriche zulassen möchten, kann dies ebenfalls behoben werden. Sie könnten auch einen Längenbereich{2,3}
anstelle des einen oder der mehreren+
Matcher angeben, wenn dies angemessener wäre.$
Passen Sie das Ende der Zeichenfolge an. Siehe das Startzeichen.quelle
Dies ist das Muster, nach dem Sie suchen
Was dies bedeutet:
^
Beginn der Zeichenfolge[...]
Übereinstimmende Zeichen im Inneren\w
Beliebiges Wortzeichen also0-9
a-z
A-Z
-_.
Match-
und_
und.
*
Null oder mehr Muster oder unbegrenzt$
Ende der ZeichenfolgeWenn Sie die Anzahl der Zeichen begrenzen möchten:
{0,5}
Bedeutet0-5
Zeichenquelle
\w
enthält_
So etwas sollte funktionieren
Dies gibt "ungültig" aus
quelle
[A-Za-z0-9_.-]*
Dies gilt auch für leere Zeichenfolgen, wenn Sie nicht möchten, dass die letzte
*
gegen eine ausgetauscht wird+
quelle