preg_match() Absätze
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufruf
buchstabe
code
dank
entfernen
fehler
fehlermeldung
feld
funktion
http
kurzbeschreibung
sonderzeichen
sprache
string
text
umlaut
umwandeln
url
zahl
zeichen
-
Hallo zusammen,
ich möchte die Absätze aus einem textarea mit preg_match erlauben. Also wen ein Enter gedrückt wird soll dieser als gültig betrachtet werden.
Wie kann ich dieses machen?
Gruß
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich weiß jetzt nicht was du genau meinst, aber vielleicht ist es das ja schon:
mit
bekommst du diese umbrüche.\n
Alsopreg_match("/\n/", ......
Wenn du was anderes meinst, wären ein paar infos mehr schon besser.
Am besten ein Beispiel.
MfG willstdueswissen
Beitrag zuletzt geändert: 24.6.2014 12:48:09 von willstdueswissen -
Danke für feine schnelle Antwort.
meine Syntax lautet
preg_match('/^[a-zA-Z0-9!?.,:+*\-\ ^°\/\(\)\n\/n]+$/',$string
wenn ich nun einen Enter eingebe also z.b.bla bla bla
dann wird ein Fehler ausgegeben. Sobald die Enter weg sind, ist die Fehlermeldung nichtmehr vorhanden.
Beispiel:
http://testing.caching-with-web.org/createcache.php
(liste nicht "wählen" in das Feld irgentwas eintragen -> Weiter -> feld1 mindestens 50 Wörter maximal 200. in die anderen platzhalter einfügen.)
Sobald du in ein Feld einE nter einfügst kommt die Fehlermeldung
Gruß -
Also ich habe folgendes ausprobiert: http://www.phpliveregex.com/p/5JO
Und es funktioniert.
Er erkennt \n als eigenes Zeichen
Guck es dir mal an
bei preg_match_all kannst du es am besten erkennen
Ich weiß nicht wie du deine php funktion aufgebaut hast.
Da kann ich nichts zu sagen.
Aber das Regex was ich dir oben gegeben habe (http://www.phpliveregex.com/p/5JO) funktioniert
Beitrag zuletzt geändert: 24.6.2014 13:23:48 von willstdueswissen -
ich habe auf der seite geschaut. Ja es funktioniert ABER es werden alle Zeichen als ok - zumindest scheinbar ok - befunden, auch die, die nicht aufgefürt sind.
-
Magst du erklären, welche Zeichen genau erlaubt sein sollen? Das macht die Sache einfacher ;)
-
Unterstriche zufällig auch? Und was ist mit Umlauten und Sonderzeichen wie etwa à?
~[\w\p{L}\s!?^/()+\-*:.,]+~g
Erlaubt
a-zA-Z0-9_\r\n\t\f!?^/()+-*:., sowie Umlaute und sämtliche Buchstaben aus allen Sprachen.
Dies ist ein Test Enthält auch Sonderzeichen in Wörtern, z.B. Smørrebrød Matcht <hier> auch nur das Nötigste.
Beitrag zuletzt geändert: 24.6.2014 14:35:35 von fabo -
der Code ist ansich sehr gut (Absätze funktionieren) aber es dürfen folgende Zeichen auf keinen Fall erlaubt sein, weil dies die Ausgabesintax zerstören könnte:
" $ ' % & { [ ] } ´ ` # <> _;~
sowie fast alle ASKII Sonderzeichen
Ja umlaute sollen erlaubt sein(waren sie auch) Nein Unterstriche nicht, da man damit Seiteninhalte auslesen könnte.
Kann deine Syntax so abgeändert werden, dass auch die Zeichen nicht erlaubt sind? -
Entferne das \w. Sollte ausreichen und war auch eigentlich unnötig.
Bei deinem obigen Regex können Umlaute gar nicht möglich gewesen sein.
Sonderzeichen sind in dem Sinne nicht erlaubt. Lediglich Buchstaben aus sämtlichen Sprachen. Sollte dies nicht gewünscht sein, ersetze das \p{L} durch a-zA-Z0-9öÖäÄüÜß oder a-z0-9öäüß mit dem i-Modifier.
Beitrag zuletzt geändert: 24.6.2014 16:53:39 von fabo -
bei
erscheint die Fehlermeldung:preg_match('~[\p{a-zA-ZäüößÄÜÖ0-9}\s!?^/()+\-*:.,]+~',utf8_encode($string))
Ich werde daraus nicht schlauWarning: preg_match(): Compilation failed: unknown property name after \P or \p at offset 27 in /www/htdocs/w011e1cb/Geocaching/Testing_Zone/createcache.php on line 105
-
Das \p{ und } gehören da nicht hin:
~[\sa-zA-ZäüößÄÜÖ0-9!?^/()+\-*:.,]+~
Beitrag zuletzt geändert: 24.6.2014 17:43:42 von fabo -
dadurch werden nun wieder alle Zeichen akzeptiert
-
Kann ich nicht reproduzieren. Erlaubt sind lediglich
\r\n\t\fa-zA-z0-9äüößÄÜÖ!?^/()+-*:.,
-
ich finde dies jetzt sehr merkwürdig... ich habe den Code komplett kopiert, wie du ihn angegeben hast. wie du auf http://testing.caching-with-web.org/createcache.phpsehen kannst (zweite Seite) ist dies nicht der Fall?!?
Gruß -
Die Kurzbeschreibung darf nur Buchstaben, Zahlen, Lehrzeichen sowie ! ? ^ / ( ) + - * : . , enthalten und muss 50 bis 200 Wörter enthalten. Es sind 2 Wörter enthalten.
Cachebeschreibung:
Die Cachebeschreibung darf nur Buchstaben, Zahlen, Lehrzeichen sowie ! ? ^ / ( ) + - * : . , enthalten.
Logtext:
Der Logtext darf nur Buchstaben, Zahlen, Lehrzeichen sowie ! ? ^ / ( ) + - * : . , enthalten. -
Hast Du die anderen Felder leer gelassen? bei mir siht das so aus http://your-destiny.lima-city.de/Bildschirmfoto%20vom%202014-06-24%2019:47:27.png
-
Code wäre an dieser Stelle interessant. Denn aktuell lässt sich das Problem nur erraten.
-
hier einmal der Code, der betroffen ist:
elseif($_POST['step2'])//TODO { $cachename = $_POST['cachename']; $cachetyp = $_POST['cachetyp']; $kurzbeschreibung = trim($_POST['kurzbeschreibung']); $cachebeschreibung = trim($_POST['cachebeschreibung']); $logtext = trim($_POST['logtext']); $stationstext = trim($_POST['stationstext']); $stationscounter = trim($_POST['stationscounter']); $fehler = "false"; if(preg_match('~[\sa-zA-ZäüößÄÜÖ0-9!?^/()+\-*:.,]+~', utf8_encode($kurzbeschreibung)) && str_word_count($kurzbeschreibung) >= "50" && str_word_count($kurzbeschreibung) <= "200" ) { $pkurzbeschreibung = "<textarea class ='ok' name ='kurzbeschreibung'>$kurzbeschreibung</textarea>"; } else { $fehler = "true"; $pkurzbeschreibung = "<textarea class ='eingabefehler' name ='kurzbeschreibung'>$kurzbeschreibung</textarea><b1>Die Kurzbeschreibung darf nur Buchstaben, Zahlen, Lehrzeichen sowie ! ? ^ / ( ) + - * : . , enthalten und muss 50 bis 200 Wörter enthalten. Es sind " . str_word_count($kurzbeschreibung) . " Wörter enthalten.</b1>"; } if(preg_match('~[\sa-zA-ZäüößÄÜÖ0-9!?^/()+\-*:.,]+~',utf8_encode($cachebeschreibung))) { $pcachebeschreibung = "<textarea class ='ok' name ='cachebeschreibung'>$cachebeschreibung</textarea>"; } else { $fehler = "true"; $pcachebeschreibung = "<textarea class ='eingabefehler' name ='cachebeschreibung'>$cachebeschreibung</textarea><b1>Die Cachebeschreibung darf nur Buchstaben, Zahlen, Lehrzeichen sowie ! ? ^ / ( ) + - * : . , enthalten.</b1>"; } if($cachetyp == "Traditionalcache") { if(preg_match('~[\sa-zA-ZäüößÄÜÖ0-9!?^/()+\-*:.,]+~',utf8_encode($logtext))) { $plogtext = "<textarea class ='ok' name ='logtext'>$logtext</textarea>"; } else { $fehler = "true"; $plogtext = "<textarea class ='eingabefehler' name ='logtext'>$logtext</textarea><b1>Der Logtext darf nur Buchstaben, Zahlen, Lehrzeichen sowie ! ? ^ / ( ) + - * : . , enthalten.</b1>"; } } else { if(preg_match('/^[a-zA-ZäüößÄÜÖ0-9!?.,:+*\-\ \^°\/\(\)\n]+$/',utf8_encode($stationstext))) { $pstationstext = "<textarea class ='ok' name ='stationstext'>$stationstext</textarea>"; } else { $fehler = "true"; $pstationstext = "<textarea class ='eingabefehler' name ='stationstext'>$stationstext</textarea><b1>Der Stationstext darf nur Buchstaben, Zahlen, Lehrzeichen sowie !?^°/()+*:., enthalten.</b1>"; } } if($fehler == "true") { echo "<form action='$url' method='post'> <input type='hidden' value='$cachename'name ='cachename'> <input type='hidden' value='$cachecode'name ='cachecode'> <input type='hidden' value='$cachetyp'name ='cachetyp'> Kurzbeschreibung:<br />$pkurzbeschreibung<br /><br /> Cachebeschreibung:<br />$pcachebeschreibung<br /><br />"; if($cachetyp == "Traditionalcache") { echo "Logtext:<br />$plogtext<br /><br />"; } else { echo "Station $stationscounter:<br />$pstationstext<br /><br />"; } echo" <input type='submit' value='Weiter'name ='step2'></form> "; } else//TODO { $kurzbeschreibung = nl2br ( $kurzbeschreibung ); $cachebeschreibung = nl2br ( $cachebeschreibung ); $logtext = nl2br ($logtext); $stationstext = nl2br ($stationstext); echo"<form action='$url' method='post'> <input type='hidden' value='$cachename'name ='cachename'> <input type='hidden' value='$cachetyp'name ='cachetyp'> <input type='hidden' value='$kurzbeschreibung' name ='kurzbeschreibung'> <input type='hidden' value='$cachebeschreibung' name ='cachebeschreibung'> Cachecode (sofern bereits vorhanden):<br /><input type='text' name ='cachecode'><br /><br /> "; if($cachetyp == "Traditionalcache") { $stationscounter = "1"; echo"Stationscode (falts gewüntscht):<br /><input type='text' name ='stationscode'><br /><br />"; code(); echo" <input type='hidden' value='$logtext'name ='logtext'> <input type='hidden' value='$stationscounter'name ='stationscounter'><br /><br /> <input type='submit' name ='erstellen' value='Erstellen'> "; } else { echo"Stationscode (falts gewüntscht):<br /><input type='text' name ='stationscode'><br /><br />"; code(); echo"<input type='hidden' value='$stationscounter'name ='stationscounter'> <input type='hidden' value='$stationstext'name ='stationstext'><br /><br /> <input type='submit' name ='erstellen' value='Erstellen'> "; } } }
es handelt sich gleich um die ersten If / else Bedingungen -
Versuchs damit...
else if(isset($_POST['step2'])) { //TODO if (!isset($_POST['cachename']) || !isset($_POST['cachename']) || !isset($_POST['cachename']) || !isset($_POST['cachename']) || !isset($_POST['cachename']) || !isset($_POST['cachename']) || !isset($_POST['cachename'])) { die('Ein unbekannter Fehler ist aufgetreten'); } $cachename= $_POST['cachename']; $cachetyp = $_POST['cachetyp']; $kurzbeschreibung = trim($_POST['kurzbeschreibung']); $cachebeschreibung = trim($_POST['cachebeschreibung']); $logtext = trim($_POST['logtext']); $stationstext = trim($_POST['stationstext']); $stationscounter = intval($_POST['stationscounter']); $fehler = false; if (!preg_match('~^[^\sa-zA-ZäüößÄÜÖ0-9!?^/()+\-*:.,]+$~', utf8_encode($kurzbeschreibung)) || str_word_count($kurzbeschreibung) < 50 && str_word_count($kurzbeschreibung) > 200) { $fehler = true; $pkurzbeschreibung = "<textarea class ='eingabefehler' name='kurzbeschreibung'>" . $kurzbeschreibung . "</textarea><b1>Die Kurzbeschreibung darf nur Buchstaben, Zahlen, Leerzeichen sowie ! ? ^ / ( ) + - * : . , enthalten und muss 50 bis 200 Wörter enthalten. Es sind " . str_word_count($kurzbeschreibung) . " Wörter enthalten.</b1>"; } else { $pkurzbeschreibung = "<textarea class ='ok' name='kurzbeschreibung'>" . $kurzbeschreibung . "</textarea>"; } if (!preg_match('~^[^\sa-zA-ZäüößÄÜÖ0-9!?^/()+\-*:.,]+$~', utf8_encode($cachebeschreibung))) { $fehler = true; $pcachebeschreibung = "<textarea class ='eingabefehler' name='cachebeschreibung'>$cachebeschreibung</textarea><b1>Die Cachebeschreibung darf nur Buchstaben, Zahlen, Leerzeichen sowie ! ? ^ / ( ) + - * : . , enthalten.</b1>"; } else { $pcachebeschreibung = "<textarea class ='ok' name='cachebeschreibung'>" . $cachebeschreibung . "</textarea>"; } if($cachetyp == 'Traditionalcache') { if (!preg_match('~^[^\sa-zA-ZäüößÄÜÖ0-9!?^/()+\-*:.,]+$~', utf8_encode($logtext))) { $fehler = true; $plogtext = "<textarea class ='eingabefehler' name='logtext'>" . $logtext . "</textarea><b1>Der Logtext darf nur Buchstaben, Zahlen, Leerzeichen sowie ! ? ^ / ( ) + - * : . , enthalten.</b1>"; } else { $plogtext = "<textarea class ='ok' name='logtext'>" . $logtext . "</textarea>"; } } else { if (!preg_match('~^[^\sa-zA-ZäüößÄÜÖ0-9!?^/()+\-*:.,]+$~', utf8_encode($stationstext))) { $fehler = true; $pstationstext = "<textarea class ='eingabefehler' name='stationstext'>" . $stationstext . "</textarea><b1>Der Stationstext darf nur Buchstaben, Zahlen, Leerzeichen sowie !?^°/()+*:., enthalten.</b1>"; } else { $pstationstext = "<textarea class ='ok' name='stationstext'>" . $stationstext . "</textarea>"; } } if ($fehler) { echo "<form action='" . $url . "' method='post'> <input type='hidden' value='" . $cachename . "' name='cachename'> <input type='hidden' value='" . $cachecode . "' name='cachecode'> <input type='hidden' value='" . $cachetyp . "' name='cachetyp'> Kurzbeschreibung:<br />" . $pkurzbeschreibung . "<br /><br /> Cachebeschreibung:<br />" . $pcachebeschreibung . "<br /><br />"; if ($cachetyp == "Traditionalcache") { echo "Logtext:<br />" . $plogtext . "<br /><br />"; } else { echo "Station " . $stationscounter . ":<br />" . $pstationstext . "<br /><br />"; } echo '<input type="submit" value="Weiter" name="step2"></form>'; } else { //TODO $kurzbeschreibung = nl2br($kurzbeschreibung); $cachebeschreibung = nl2br( $cachebeschreibung); $logtext = nl2br($logtext); $stationstext = nl2br($stationstext); echo "<form action='" . $url . "' method='post'> <input type='hidden' value='" . $cachename . "' name='cachename'> <input type='hidden' value='" . $cachetyp . "' name='cachetyp'> <input type='hidden' value='" . $kurzbeschreibung . "' name='kurzbeschreibung'> <input type='hidden' value='" . $cachebeschreibung . "' name='cachebeschreibung'> Cachecode (sofern bereits vorhanden):<br /><input type='text' name='cachecode'><br /><br />"; if ($cachetyp == 'Traditionalcache') { $stationscounter = 1; echo 'Stationscode (falts gewüntscht):<br /><input type="text" name="stationscode"><br /><br />'; code(); echo "<input type='hidden' value='" . $logtext . "' name='logtext'> <input type='hidden' value='" . $stationscounter . "' name='stationscounter'><br /><br /> <input type='submit' name='erstellen' value='Erstellen'>"; } else { echo 'Stationscode (falts gewüntscht):<br /><input type="text" name="stationscode"><br /><br />'; code(); echo "<input type='hidden' value='" . $stationscounter . "' name='stationscounter'> <input type='hidden' value='" . $stationstext . "' name='stationstext'><br /><br /> <input type='submit' name='erstellen' value='Erstellen'>"; } } }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage