Portal > Foren > PHP > PHP-Programmierung > spezielle Überprüfung
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 17.02.2007, 00:24 Nach oben    #1
Benutzer
 
Registriert seit: 25.02.2006
Beiträge: 54
Standard spezielle Überprüfung

Hi!

Ich bin gerade dabei meine Formulare auf den neusten und sichersten Stand zu bringen. Ich verwende folgende Überprüfungen:

PHP-Code:
if (!ereg("[a-zA-Z]",$vorname))...
if (!
ereg("[0-9/. ]",$nummer))...
if (!
ereg("^([0-9]+)/([0-9])"$telefon))... 
Allerdings habe ich festgestellt, dass wenn ich z.B. bei der alphabetischen Überprüfung ein / etc. eingebe dieser nicht bemerkt werden. Desweiteren habe ich gelesen, dass ereg nicht mehr so empfohlen wird sondern eher preg_match. Aber irgendwie finde ich preg_match nicht so passend dafür.

Darum würde mich interessieren, wie ihr eine solche Überprüfungen umsetzt bzw. was ihr verwendet.

Würde mich über Antworten freuen!

Grüße
julien
julien ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 08:36 Nach oben    #2
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 459
Standard

So könnte man das lösen:
PHP-Code:
if ( !ereg("[a-zA-Z]"$vorname) OR ereg("/"$vorname) ) ... 
Es geht aber sicher noch einfacher/eleganter..


8.2. Soll ich ereg() oder preg() verwenden?
http://www.php-faq.de/q/q-regexp-ereg.html
__________________
Corvin ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 08:46 Nach oben    #3
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.134
Standard

Ja... so:
PHP-Code:
if(!preg_match('^\w+$i'$vorname) ... 
Wenn nur die Zeichenklasse wie oben definiert wird, dann reicht es, wenn da ein einziger Buchstabe drin vorkommt... wenn das ganze Ding ein Wort sein soll, dann muss man das schon mit ^ und $ angeben.
Bei Corvins Lösung müsste also auch "p@tr!c{" ein valider Vorname sein (kommt ja schließlich ein Buchstabe und kein "/" drin vor!).
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 10:47 Nach oben    #4
Benutzer
 
Registriert seit: 25.02.2006
Beiträge: 54
Standard

@Corvin, danke für den Tipp, aber mein Ziel ist es eher eleganter/einfacher zu machen

@pago
Danke für den Code. Allerdings bekomme ich folgende Fehlermeldung:

Zitat:
Warning: preg_match() [function.preg-match]: No ending delimiter '^' found...
Wo kann ich denn eine Erklärung für den Aufbau (^\w+$i) finden?
julien ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 11:05 Nach oben    #5
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Zitat:
Zitat von julien Beitrag anzeigen
@pago
Danke für den Code. Allerdings bekomme ich folgende Fehlermeldung:

Zitat:
Warning: preg_match() [function.preg-match]: No ending delimiter '^' found...
Delimiter vergessen. Das müsste korrekt sein:
PHP-Code:
'|^[a-z]+$|i' 
Wobei die Frage bleibt, ob Vornamen keine Umlaute etc. enthalten sollen, sowie Leerzeichen, Bindestriche und den Punkt (Günther, Joél, Karl-Heinz, Anna Lisa, Klaus M.) und, ob es Sinn macht, wenn ein Vorname nur 1 Zeichen lang ist oder auch 341 Zeichen bzw. wie lange er eben sein sollte.

Also immer erstmal exakt definieren und dann (wenn dir das nicht gleich möglich ist) in einen regulären Ausdruck schreiben. Tests (die vor dem Ausdruck geschrieben werden) helfen, dir klar zu machen, was genau du brauchst und ausschließen willst und dokumentieren einen Ausdruck gleichzeitig sehr schön.

Zitat:
Wo kann ich denn eine Erklärung für den Aufbau (^\w+$i) finden?
Zum Beispiel hier:
http://www.regenechsen.de/phpwcms/index.php?regex_allg

Das PHP-Handbuch sollte dir auch weiterhelfen ... allerdings vielleicht nicht gerade beim ersten Einstieg.

Basti

Geändert von Basti (17.02.2007 um 11:19 Uhr)
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 13:03 Nach oben    #7
Benutzer
 
Benutzerbild von xabbuh
 
Registriert seit: 03.12.2005
Ort: Osnabrück
Beiträge: 76
Standard

Hallo,

ein Blick auf die Funktionen der Character Type Erweiterung dürfte sich sicherlich ebenfalls lohnen. Diese Funktionen bieten dir zudem den Vorteil, dass sie mit unterschiedlichen Locales gefüttert werden können und deswegen auch für unterschiedliche Sprachen recht gut geeignet sind.

Gruß
xabbuh ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 14:39 Nach oben    #8
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 459
Standard

Zitat:
Zitat von julien Beitrag anzeigen
@Corvin, danke für den Tipp, aber mein Ziel ist es eher eleganter/einfacher zu machen
Wie pago schon schrieb, diese "Lösung" ist sowieso Schwachsinn.
War ja auch noch so früh..
__________________
Corvin ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 17:39 Nach oben    #9
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von xabbuh Beitrag anzeigen
Hallo,

ein Blick auf die Funktionen der Character Type Erweiterung dürfte sich sicherlich ebenfalls lohnen. Diese Funktionen bieten dir zudem den Vorteil, dass sie mit unterschiedlichen Locales gefüttert werden können und deswegen auch für unterschiedliche Sprachen recht gut geeignet sind.

Gruß
Leider bekomme ich es nicht zum "laufen" Ich habe
folgendes versucht und der germanStyle geht immer als >>Nicht OK<< durch.
PHP-Code:
$germanStyle "SchöneGrüße";
$asciiStyle "SchoeneGruesse";

echo 
setlocale(LC_ALL'german''de_DE.UTF8''de_DE@euro''de_DE''de''ge');
echo 
"\n";
print_r(localeconv());

echo 
ctype_alpha($germanStyle) ? "OK" "Nicht OK";
echo 
"\n";
echo 
ctype_alpha($asciiStyle) ? "OK" "Nicht OK"
Getestet habe ich es auf Linux sowie auch auf Windows. Habe ich was vergessen
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 18:10 Nach oben    #10
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Die Frage ist, wie dein Formular kodiert ist. Wenn es auf einer UTF-8-kodierten Seite eingebunden ist, dann sollte dein Test-String hier auch UTF-8-kodiert sein und das "german" würd ich weglassen (wobei ich grad keine Ahnung hab, wer da was für "einsetzt").

setlocale() ist übrigends nicht Thread-sicher, steht ja aber auch im Handbuch.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 21:28 Nach oben    #11
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
Die Frage ist, wie dein Formular kodiert ist. Wenn es auf einer UTF-8-kodierten Seite eingebunden ist, dann sollte dein Test-String hier auch UTF-8-kodiert sein
PHP-Code:
<?php
error_reporting
(E_ALL);

$current_locale setlocale(LC_ALL'german''de_DE.UTF8''de_DE@euro'
                            
'de_DE''de''ge');

$german_style = isset($_POST['name']) ? $_POST['name'] : '';
?>
<html>
<head>
<title>Ctype Alpha</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>

<body>

<p>Momentaner locale Wert: <?php echo htmlspecialchars($current_locale?></p>

<pre>
<?php print_r(localeconv()); ?>
</pre>

<form action="<?php echo $_SERVER['SCRIPT_NAME'?>" method="post">
  <?php if ($german_style !== '':( ?>
  <div style="border: 1px solid red">
      <?php echo htmlspecialchars($german_style) . " ist " . (ctype_alpha($german_style) ? "ist OK " "nicht OK"?><br />
  </div> <br/>
  <?php endif ?>

  <label for="txtName">Name:</label>
  <input name="name" id="txtName" value="<?php echo htmlspecialchars($german_style?>" type="text" />
  <input type="submit" /> 
</form>

</body>
</html>
Die Kodierung ist hier ISO-8859-1 (Westeuropa) und trotzdem bekommen ich
bei der Eingabe >>ShöneGrüße<< >> ShöneGrüße ist nicht OK<< als
Antwort. Jemand eine Idee

Hier die relevanten Ausgaben (Linux
Code:
Momentaner locale Wert: de_DE.UTF8

Array
(
    [decimal_point] => ,
    [thousands_sep] => .
    [int_curr_symbol] => EUR 
    [currency_symbol] => €
    [mon_decimal_point] => ,
    [mon_thousands_sep] => .
    [positive_sign] => 
    [negative_sign] => -
    [int_frac_digits] => 2
    [frac_digits] => 2
    [p_cs_precedes] => 0
    [p_sep_by_space] => 1
    [n_cs_precedes] => 0
    [n_sep_by_space] => 1
    [p_sign_posn] => 1
    [n_sign_posn] => 1
    [grouping] => Array
        (
            [0] => 3
            [1] => 3
        )

    [mon_grouping] => Array
        (
            [0] => 3
            [1] => 3
        )

)

ShöneGrüße ist nicht OK
Zitat:
Zitat von Basti Beitrag anzeigen
und das "german" würd ich weglassen (wobei ich grad keine Ahnung hab, wer da was für "einsetzt").
german habe ich wegen den Windows-Rechner eingesetzt.

http://msdn.microsoft.com/library/de...ge_strings.asp
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 22:10 Nach oben    #12
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Was wundert dich jetzt, wenn Latin1-Umlaute nicht als korrekte UTF-8-Buchstaben identifiziert werden? Hast du dir schonmal ein ISO-8859-1 ä mit "UTF-8-Brille" angeschaut? Ist in jedem Fall kein Buchstabe, wie er in der deutschen Sprache vorkommt.

In dem Fall also entweder die Formular-Seite auf utf-8 umstellen oder eben auf Latin1 prüfen.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2007, 22:35 Nach oben    #13
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
In dem Fall also entweder die Formular-Seite auf utf-8 umstellen oder eben auf Latin1 prüfen.
Also die Datei selbst ist in UTF-8 abgespeichert, die Zeichenkodierung des
Dokuments sowie des Formulars sind auf UTF-8 eingestellt.
HTML-Code:
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
HTML-Code:
<form accept-charset="UTF-8"...
Der Browser hat ebenfalls die Zeichenkodierung UTF-8 "angenommen"
$current_locale gibt "de_DE.UTF8" zurück und trotzdem erhalte ich
>>ShöneGrüße ist nicht OK<<. Langsam zweifel ich an mir...
Kannst du bitte ein Beispiel posten, wie es denn richtig ist?
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2007, 14:40 Nach oben    #14
Benutzer
 
Registriert seit: 25.02.2006
Beiträge: 54
Standard

Hi,

ich habe die Überprüfung jetzt doch etwas aufwendiger mit einer function() gemacht. Bezüglich der Rex-Übersicht habe ich noch ein paar Seiten gefunden, die ganz gut sind, vielleicht hilft es ja auch dem ein oder anderem.

http://de.wikibooks.org/wiki/Website...Ausdr%C3%BCcke
http://www.webwork-magazin.net/tricks/artikel/156


Edit

Ich hab gerade noch ein anderes Problem und zwar möchte ich eine Zeichenkette überprüfen, ob diese mindestens ein Zeichen, einer vorgegebenen Auswahl besitzt.

z.B. Soll "85395" untersucht werden, ob sich mindestens ein Buchstabe darin befindet. Wenn nicht ein >error< ausgeben, wenn ja >okay< ausgeben.

Kann mir da jemand helfen, ich steh gerade voll auf dem Schlauch...

Danke und Grüße
julien

Geändert von julien (20.02.2007 um 14:43 Uhr)
julien ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2007, 15:00 Nach oben    #15
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Wieder die Frage, was du mit Buchstabe meinst. Für Buchstaben des englischen Alphabets einfach sowas hier:

PHP-Code:
print preg_match('|[a-z]+|i'$sInput) ? 'okay' 'error'
@"dejan_spasic":
Sorry, kann ich grad nicht leisten...
Ich würd die Funktion mal ohne Formular durchchecken. Dabei die Zeichenkodierung deines Editors natürlich ensprechend setzen.

Ich mache um setlocale nach einigen bösen Überraschungen vor ein, zwei Jahren prinzipiell einen großen Bogen (auch, wenn auf meinen Servern PHP prinzipiell als CGI eingebunden ist).

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2007, 15:21 Nach oben    #16
Benutzer
 
Registriert seit: 25.02.2006
Beiträge: 54
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
Wieder die Frage, was du mit Buchstabe meinst. Für Buchstaben des englischen Alphabets einfach sowas hier:
Sorry, hatte ich übersehen die Frage. Buchstaben = Alphabet von a bis z ohne Umlaute.

Zitat:
Zitat von Basti Beitrag anzeigen
PHP-Code:
print preg_match('|[a-z]+|i'$sInput) ? 'okay' 'error'
funktioniert tadellos!
Danke!

julien
julien ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2007, 16:49 Nach oben    #17
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
@"dejan_spasic":
Sorry, kann ich grad nicht leisten...
Ich würd die Funktion mal ohne Formular durchchecken. Dabei die Zeichenkodierung deines Editors natürlich ensprechend setzen.
Verstehe... nicht schlimm.

Was mich halt an der Sache so beschäftig ist die Tatsache, dass die
Zend_Validate_XXX Klassen, von Zend Framework, teilweise ebenfalls
Funktionen von ctype einsetzen. Siehe Zend_Validate_Alpha::isValid
oder Zend_Validate_Alnum::isValid.
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)

Geändert von dejan_spasic (20.02.2007 um 16:52 Uhr)
dejan_spasic ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2007, 13:10 Nach oben    #18
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von dejan_spasic Beitrag anzeigen
Zitat:
Zitat von xabbuh Beitrag anzeigen
Hallo,

ein Blick auf die Funktionen der Character Type Erweiterung dürfte sich sicherlich ebenfalls lohnen. Diese Funktionen bieten dir zudem den Vorteil, dass sie mit unterschiedlichen Locales gefüttert werden können und deswegen auch für unterschiedliche Sprachen recht gut geeignet sind.

Gruß
Leider bekomme ich es nicht zum "laufen" Ich habe
folgendes versucht und der germanStyle geht immer als >>Nicht OK<< durch....
Dank Jakob Buchgraber aus phpbar Mailingliste habe ich nun erfahren, warum
es nicht funktionieren konnte. Zumindest noch nicht.
Zitat:
Weil die PHP Funktionen vor Version 6 nicht mit Unicode (Multibyte
Strings) umgehen können. Du kannst ja mal bei snaps.php.net den CVS
Snapshot von PHP6 runterladen und schaun ob die ctype Funktionen schon
auf Unicode portiert worden sind. Es gibt auch eine PHP Erweiterung
namens mb_string, die Multibyte Strings unterstützt (php.net/mb_string)

Mehr zu UTF8 und Unicode findest du bei Wikipedia
http://de.wikipedia.org/wiki/UTF8
http://de.wikipedia.org/wiki/Unicode

Cheers,
Jay
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2007, 13:24 Nach oben    #19
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

[ot]
Tjoa, hätte er dir wahrscheinlich vor ein paar Monaten auch hier im DevGuide beanworten können.
[/ot]
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2007, 13:32 Nach oben    #20
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Wundert mich aber. Klar sind substr(), strlen() und co. noch nicht fit in Sachen MB-Strings, aber von speziellen Erweiterungen, denen man explizit eine Zeichentabelle angibt würde ich das zuletzt erwarten.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Alexa Statistiken nur für spezielle (Sub)Domain Ben Plauderecke 5 11.04.2007 11:54
Spezielle Lizenz für Veröffentlichung eines CMS gesucht ... Ben Plauderecke 6 09.01.2006 21:18
Spezielle Fenster... Sym Desktop-Applikationen und Grafik