Aber diese Methode wird nicht Fehler wie folgt erkennen:
Weil das Zählen macht Sinn nur dann, wenn Sie prüfen möchten, ob die Anzahl der öffnenden und schließenden Klammern gleich ist. Aber wenn Sie freundlich zu Ihrem Benutzer sein und auf den Ort zeigen möchten, an dem er einen Fehler gemacht hat, dann ist das Zählen nicht ausreichend und Sie sollten den Stack verwenden (sogar Array-basierter Stack basierend auf array_push()
und array_pop()
würde ausreichen). Mit stack iterieren Sie über Ihre Zeichenfolge und drücken ein Token, wenn Sie die öffnende Klammer <
treffen und ein Token aufstoßen, wenn Sie ein >
schließen. In Ihrem Fall:
This is >b<BOLD>/b< word
würden Sie pop
als erstes zu tun haben, ist >
aber es gibt nichts auf Stapel so löst dieser Fehler. Lassen Sie sich, dass die Halterung befestigen und weiter:
This is <b<BOLD>/b< word
und läuft
push -> ok
push -> well if you allow nested brackets, then all is ok, otherwise
stack must be empty prior pushing so this bracket is misplaced
and you shall throw an error
und so weiter ... und wenn Sie Ende der Schnur zu erreichen und der Stapel nicht leer ist, dann wissen Sie entdeckten letzte <
Misses sein >
Paar (Wenn Sie Bracket verschachteln, dann Logik möglicherweise zu sagen, welche möglicherweise nicht geschlossen ist möglicherweise komplizierter und manchmal falsche Ergebnisse (wie Compiler manchmal in einem ähnlichen Fall zum Beispiel)).
Wenn Sie keine verschachtelten Klammern planen zu lassen, dann können Sie Ihren Code machen noch einfacher als einfachen integer
Variable mit dem Zustand, um anzuzeigen, würde genügen (dh ‚0‘ für <
, 1
für >
und -1
für den Ausgangszustand)
ist es html? dann könnten Sie das versuchen: http://stackoverflow.com/questions/3167074/which-function-in-php-validate-i-f-the-string-is-valid-html – jbe
Überprüfen Sie bitte die Antworten und erwägen, das eine zu akzeptieren funktioniert am besten für Sie/Upbooten diejenigen, die Sie hilfreich finden. Oder geben Sie weitere Klarstellungen im Hauptteil Ihrer Frage an. –