string auf nicht erlaubte zeichen überprüfen

Thundy

Mitglied
Hallo,

ich hab folgendes Problem:

Ich möchte die Formulareingabe, die aus einem Registrierungsformular kommt, auf ungültige Zeichen überprüfen. Halt damit ich keine {}, €, ~, ê usw drin hab.
Hatte erst vor, das mit preg_match() zu realisieren, dort kann ich aber scheinbar nur sagen, welche Zeichen ungültig sein solln.
Ich such aber sowas, was nur bestimmte Zeichen zulässt, quasi das Gegenteil.
PHP:
$string = $_POST['login_id'];
if (nurgutezeichenvorhanden("a-z.A-Z.0-9.(.).[.],$string")) {
    *freuen und in db einschreiben*
} else {
    *meckern*
}
...und diese nurgutezeichenvorhanden-Funktion fehlt mir.. >.<

:rtfm: << hab ich schon ergebnislos :mad:

Wäre schön, wenn mir jemand helfen kann! :)


lg
 
Zuletzt bearbeitet:
preg_match() geht schon, wenn er dir dann deine eingegebenen zeichen rausfiltert, du aber haben willst, dass er alles andere rausfiltert, dann mach ein ! davor, dies negiert den ausdruck
 
:confused::confused::confused:

Erstmal Danke für die Antworten. :)

Also ich hab mir nu mal das RegEx-tut von der Seite durchgelesen, aber mit deinem Pattern kann ich noch nich viel anfangen. Was "nennt" es denn für Zeichen? Wie ein !(A-Za-z0-9) sieht es eher nicht aus..^^
Wie solln denn da alle Sonderzeichen von Überall drin vorkommen?..

Und wie soll ich negieren?

PHP:
$string = $_POST['login_id'];
if !(preg_match('[A-Za-z0-9], $string')) {
    *freuen und in db einschreiben*
} else {
    *meckern*
}
oder eher so?
PHP:
$string = $_POST['login_id'];
if (preg_match('[^A-Za-z0-9], $string')) {
    *freuen und in db einschreiben*
} else {
    *meckern*
}

Weil theoretisch würde ersteres sagen: wenn nicht alle Buchstaben von A-Z, .. vorhanden sind, gibts false. "MaxMustermann" hätte zb kein P drin...
Und beim 2. genau das gleiche, blos das nich die Abfrage negiert wird, sondern das Suchmuster, oder wie?

PHP:
$string = $_POST['login_id'];
if (preg_match('#^[a-zA-Z_-\[\]\(\)][a-zA-Z0-9_-\[\]\(\)]*$#', $string)) {
    *freuen und in db einschreiben*
} else {
    *meckern*
}
^ Also ich werds morgen erstmal so versuchen. Iwo auf Seite 2 war ein Thread, der mit der Suche nicht zu finden war, wo ein ähnliches Problem behandelt wurde.



*edit: in dieser Form t es nun:
preg_match('/^[a-zA-Z0-9_-]*$/', $string))

wenn ich nun [ ] ( ) hinzufügen will und mit backslash maskiere:
preg_match('/^[a-zA-Z0-9_-\[\]\(\)]*$/', $string))
bekomme ich bei gültigem string folgende ausgabe:
Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 14 in /var/www/virtual/grex-lycanum.de/htdocs/regtest.php on line 4
ungültig
 
Zuletzt bearbeitet:
*push*

Also ich bin mit meinem Latein bzw Regex am Ende.. :mad:

$string = 'hallo111';

'/^[a-zA-Z0-9_-]*$/' t ganz wunderbar, aber sobald ich irgendwie eckige oder runde Klammern einfüge:

Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 14 in /var/www/virtual/grex-lycanum.de/htdocs/regtest.php on line 4
ungültig

..in sämtlichen Tuts und Beispielen wird der Backslash zum maskieren verwendet.
'/^[a-zA-Z0-9_-\[]*$/' klappt aber auch nicht..

Hier wiederum werden gleich mehrere Backslashes verwendet, aber auch folgendes geht nicht.
'/^[a-zA-Z0-9_-\\[]*$/'
'/^[a-zA-Z0-9_-\\\[]*$/'

:confused:
 
Zurück