php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.11.2006, 21:32  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard Reguläre Ausdrücke (preg_match)

Hallo ihr,

ich bin wieder mal etwas ratlos was diese regulären Ausdrücke angeht.
Ich habe ein wenig herumprobiert, aber ich muss sagen, das ist mehr
"trail and error" als Wissen.
Es wäre unheimlich gut, wenn sich das jemand man anschauen könnte,
wie viel Sinn oder Unsinn die jeweiligen Suchmuster machen und was man ggf. verbessern kann.
Also ich bin wirklich bereit das zu verstehen und mich da einzulesen, aber
wenn man sich im Netz so ansieht, sind die Grundlagen schon klar, aber
bis man da mit Ausprobieren an eine richtige Lösung kommt ist der Tag
um. Und selbst dann wäre ich mir nicht sicher, ob auch pas geprüft wird,
was geprüft werden soll. Also das ist nicht ganz trivial und braucht wohl
etwas Erfahrung und Zeit.
Gibt es da etwas, was man auch verstehen kann und auch auf PHP zugeschnitten ist.
Wenn ich das richtig verstanden habe, ist das durchaus ein stückweit "plattformabhängig"
oder ist das völlig egal ob php, pearl, js, oder sonst was?


Emailadresse
PHP-Code:
if (!empty($row)) {
  
$suchmuster ='/^([a-z0-9._-]+)@([a-z0-9.-]+.[a-z][a-z]+)$/';
  
$row         strtolower($row);
  if (!
preg_match($suchmuster$row)) { 
    
$check=1
  }


URL
Hier stört mich ungemein, dass auf www geprüft wird, aber ich möchte
das gerne optional prüfen - habe zum Beispiel (www)? ausprobiert, aber
das geht nicht.
PHP-Code:
if (!empty($row)) {
  
$suchmuster     ='/^((http:\/\/)(www)\.[a-zäöü0-9_\-\.]{3,200}[\.][a-z]{2,4})$/';
  
$row         strtolower($row);
  if(!
preg_match($suchmuster$row)) {
     
$check=1
  }


Telefonummer
PHP-Code:
if (!empty($row)) {
  
$suchmuster '#^([0-9 ()/-]{7,15}+)$#';
  if (!
preg_match($suchmuster$row)) { 
    
$check=1
  }

Viele Grüße
Tine
tinchen ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.11.2006, 21:44  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

hi tinchen.
wenn 'diese regulären Ausdrücke' nur nicht so verdammt praktisch wären, was. anyway. erste ansätze.

zu deinem ersten problem gabs hier vor kurzen grad ne anfrage, vielleicht sogar im experten-forum (wow)... es ist aber ne frage, wie komplex man den ausdruck gestalten möchte.

zu 2
(www)? ist schon fast richtig, nur den punkt hast du vergessen, denn http://.etwas... Adressen gibts ja nicht. So wärs dann korrekt:
(www\.)?
bist du sicher,daß du umlaute in den url erlauben möchtest. ist ja noch nicht so weit verbreitet.
allgemein ist es nie verkehrt in den abschließenden delimiter (das den ausdruck umschließende zeichen) ein i für groß-kleinschreibung unabhängig zu setzen.

zu 3
telefonnummern könnten noch etwas komplexer geprüft werden, wenn ich mal jetzt wüßte wie der allg. aufbau ist. was willst du denn alles abdecken mit klammern und bindestrichen?

schreib ruhig mal, was für fälle du konkret erlauben möchtest. das ist ja immer das a & o bei reg Expr.
nikosch ist offline  
Alt 09.11.2006, 21:52  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo Tine,
kleiner Tipp: Prüf entweder nur auf das rohe Format oder richtig. So ein hoffentlich-erwisch-ich-alle RegExp ist Käse und vergrault dir im schlimmsten Fall einige Benutzer. Ob du die dann nochmal erwischt ist fraglich.
Such doch einfach in Google, du bist bestimmt nicht die erste, die soetwas sucht.
Schlagworte: regexp, email, php

Für Links gilt das selbe.

Eine Telefonnummer zu testen, ich weiß nicht - wozu? Der größte Fehler liegt wohl in Zahlendrehern o.ä., den kannst du durch Formatüberprüfung auch nicht erkennen. Hier fände ich eher die Atomisierung wichtig, ein Feld für Vorwahl, eins für die Rufnummer. Aus den Feldern einfach alle Nicht-Zahlen [^\d] entfernen und gut ist.
Gleiches übrigens für Straße und Hausnummer, die gehören eigentlich nicht ins selbe Feld (wichtig zB für externe Bonitätsprüfungs-Dienstleister )
Zergling-new ist offline  
Alt 09.11.2006, 22:00  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Hallo nikosch,

also, alle Großbuchstaben schließe ich mit
$row = strtolower($row);
ja vorher aus, so das mich nur noch die Kleinen interessieren.
Umlaute sind ok, aber ich möchte unbedingt Subdomains zulassen in der Art
http:// sub.domain.de, aber mit (www)? geht das zumindest nicht. Wird als nicht
korrekt angezeigt. http:// test.domain.de

Mit den Telefonummern bin ich eigentlich zufrieden, sofern geprüft wird, dass nur Zahlen
und () / - enthalten sind. Sprich also 07875-74647365 oder 06374/546476.
Da könnte man natürlich den ersten Teil zwischen 3 und 5(6) Zeichen festlegen usw.
aber das ist mir nicht so wichtig. Mal sehen.

Die Emailgeschichte muss auch auf jeden Fall Subdomains zulassen.
z.B. vorname.nachname@sub.domain.de

Gruß
Tine
tinchen ist offline  
Alt 09.11.2006, 22:09  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Hallo Zerling,

damit hast du natürlich Recht, aber dieses Formular steht nur Usern zur Verfügung,
die Interesse an einer Dienstleitung haben und von daher Ihre Daten schon
einigermaßen richtig eingeben. Ich möchte mit der Prüfung im Wesentlichen Bots und
Schmierfinken draußenhalten. Das Formular wird immer neu mit den bereits
eingegebenen Daten geladen, so dass man sein Eingaben überprüfen kann. Das
Formular ist sehr komplex und beinhaltet eine Menge Felder, so dass ich
zumindest ausschließen möchte, dass gänzlicher Müll gespeichert wird.

Ob eine Telefonnummer richtig ist, kann ich nicht prüfen, aber ich kann
zumindest ausschließen, dass xgtfhf als Telefonnummer in der Datenbank
gespeichert wird.

Gruß
Tine
tinchen ist offline  
Alt 09.11.2006, 22:19  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

überlesen?
Code:
(www\.)?
vielleicht so (ungetestet):
Code:
#(http://(www\.)?[a-zäöü]+([\._\-][a-zäöü]+)*\.[a-z]{2,4})#
(ich glaub bei genauerem hinsehen der www schnickschnack kann eigentlich raus, müße eh vom restlichen ausdruck abgedeckt sein)

tel. find ich auch o.k., aber die klammern () würde ich als bestandteil weglassen.
nikosch ist offline  
Alt 09.11.2006, 22:26  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Nein, nein,

ich habe schon beide Möglichkeiten versucht, da geht aber nichts.

Deine letzte Lösung ist auf dem ersten Versuch mal positiv. Danke. Mal sehen,
was mir noch dazu einfällt.

Gruß
Tine
tinchen ist offline  
Alt 09.11.2006, 23:13  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ausländische Telefonnummern sind nicht erlaubt?
Zergling-new ist offline  
Alt 09.11.2006, 23:21  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Zitat von Zergling
Ausländische Telefonnummern sind nicht erlaubt?
wie äußert sich das? anzahl der stellen? doppel 0? noch mehr?
nikosch ist offline  
Alt 09.11.2006, 23:34  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

++49 (0) 721 123456
Aber geht natürlich auch mit 0049 ..
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
preg_match telefonnummer, php preg_match telefonnummer, preg_match subdomain, preg_match strasse, php preg_match telefon, http://www.php.de/php-tipps-2006/42770-regulaere-ausdruecke-preg_match.html, preg_match telefon, preg match telefonnummer, preg_match strasse hausnummer, preg_match straße, preg_match suchmuster, telefonnummer regulärer ausdruck preg_match, preg_match ausdrücke, preg_match hausnummer, preg telefonnummer, php preg_match strass und hausnummer, php reguläre ausdrücke beispiele, php preg_match ausdrücke, preg_match strassenname, preg_match www

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.