Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Regex für Vorname[leer]Nachname im Anmeldeformular

Hier können Sie Ihre Fragen zum Thema Suchmaschinenoptimierung (SEO) / Positionierung stellen
Neues Thema Antworten
euroexchange.de
PostRank 6
PostRank 6
Beiträge: 471
Registriert: 02.06.2007, 13:49

Beitrag von euroexchange.de » 24.02.2012, 13:34

Hallo @all.

Also mit Regex stehe ich auf Kriegsfuss, hoffe aber, das es hier ein paar Profis gibt, die mir bei der Lösung helfen können.

Ich möchte in einem Anmeldeformular in einem Feld gemeinsam Name und Vorname prüfen lassen und nur zulassen, wenn die Angaben in Ihrer Form den folgenden Kriterien entsprechen:

Paul Mustermann
Paul Mustermann Krammer
Paul Mustermann-Krammer

Hans Paul Mustermann
Hans-Paul Mustermann
Hans Paul Mustermann Krammer
Hans-Paul Mustermann Krammer
Hans-Paul Mustermann-Krammer

Jeweils der erste Buchstabe (H)ans (P)aul (M)ustermann (K)rammer muß ein Großbuchstabe sein.

Bisher habe ich:

Code: Alles auswählen

^[A-ZÄÖÜ\.-][a-zäöü\.-]+ [a-zA-ZäöüÄÖÜ-]+ [a-zA-ZäöüÄÖÜ-]
Jemand eine Idee? Danke!

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 25.02.2012, 01:42

Ist ungetestet, doch ich würde so beginnen und falls es dann funktionieren sollte, alle drei Zeilen nach dem Schema (erstes Muster|zweites Muster|drittes Muster) zusammenfügen. Mag aber sein, dass die Muster noch nicht perfekt sind, dazu mache ich das zu selten und einfacher ginge es mit explode() und strstr().

Code: Alles auswählen

Erstes Muster sollte finden: 

Paul Mustermann

([A-ZÄÖÜ]{1,1})([a-zäöü]+)\s{1,1}([A-ZÄÖÜ]{1,1})([a-zäöü]+)



Zweites Muster sollte finden: 

Paul Mustermann Krammer
Paul-Mustermann Krammer
Paul Mustermann-Krammer

([A-ZÄÖÜ]{1,1})([a-zäöü]+)(\s{1,1}|-{1,1})([A-ZÄÖÜ]{1,1})([a-zäöü]+)(\s{1,1}|-{1,1})([A-ZÄÖÜ]{1,1})([a-zäöü]+)



Drittes Muster sollte finden: 

Hans Paul Mustermann Krammer
Hans-Paul Mustermann Krammer
Hans-Paul Mustermann-Krammer

([A-ZÄÖÜ]{1,1})([a-zäöü]+)(\s{1,1}|-{1,1})([A-ZÄÖÜ]{1,1})([a-zäöü]+)\s([A-ZÄÖÜ]{1,1})([a-zäöü]+)(\s{1,1}|-{1,1})([A-ZÄÖÜ]{1,1})([a-zäöü]+)
Ganz verkehrt kann es jedenfalls nicht sein, denn das funktioniert schon einmal:

Code: Alles auswählen

$teststr = "Marlene ist schön und Paul Mustermann-Krammer ist es nicht.";

$muster  = '/([A-ZÄÖÜ]{1,1})([a-zäöü]+)(\s{1,1}|-{1,1})([A-ZÄÖÜ]{1,1})([a-zäöü]+)(\s{1,1}|-{1,1})([A-ZÄÖÜ]{1,1})([a-zäöü]+)/';
preg_match($muster, $teststr, $treffer);

echo $treffer[0]."\n";  

// Ausgabe: Paul Mustermann-Krammer 

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 25.02.2012, 14:41

Findet schon einmal alle drei Namen im Teststring, ist aber noch nicht perfekt. Das ginge sicherlich noch besser:

Code: Alles auswählen

<?php

$testst = "Marlene ist schön und Paul Mustermann-Krammer ist es nicht, doch dafür ".
          "ist Heidi-Ärenika Musterfrau-Übach so blond wie Max Mustermann.";


$muster1 = "/&#40;&#40;&#91;A-ZÄÖÜ&#93;&#123;1,1&#125;&#41;&#40;&#91;a-zäöü&#93;+&#41;\s&#123;1,1&#125;&#40;&#91;A-ZÄÖÜ&#93;&#123;1,1&#125;&#41;&#40;&#91;a-zäöü&#93;+&#41;&#40;\s|\.&#41;&#41;/";
$muster2 = "/&#40;&#40;&#91;A-ZÄÖÜ&#93;&#123;1,1&#125;&#41;&#40;&#91;a-zäöü&#93;+&#41;&#40;\s&#123;1,1&#125;|-&#123;1,1&#125;&#41;&#40;&#91;A-ZÄÖÜ&#93;&#123;1,1&#125;&#41;&#40;&#91;a-zäöü&#93;+&#41;&#40;\s&#123;1,1&#125;|-&#123;1,1&#125;&#41;&#40;&#91;A-ZÄÖÜ&#93;&#123;1,1&#125;&#41;&#40;&#91;a-zäöü&#93;+&#41;&#40;\s|\.&#41;&#41;/";
$muster3 = "/&#40;&#40;&#91;A-ZÄÖÜ&#93;&#123;1,1&#125;&#41;&#40;&#91;a-zäöü&#93;+&#41;&#40;\s&#123;1,1&#125;|-&#123;1,1&#125;&#41;&#40;&#91;A-ZÄÖÜ&#93;&#123;1,1&#125;&#41;&#40;&#91;a-zäöü&#93;+&#41;\s&#40;&#91;A-ZÄÖÜ&#93;&#123;1,1&#125;&#41;&#40;&#91;a-zäöü&#93;+&#41;&#40;\s&#123;1,1&#125;|-&#123;1,1&#125;&#41;&#40;&#91;A-ZÄÖÜ&#93;&#123;1,1&#125;&#41;&#40;&#91;a-zäöü&#93;+&#41;&#41;/";

$i = 1;

for &#40;$i; $i <= 3; $i++&#41; &#123;

	if &#40;$i === 1&#41; &#123;$muster = $muster1;&#125;
	if &#40;$i === 2&#41; &#123;$muster = $muster2;&#125;
	if &#40;$i === 3&#41; &#123;$muster = $muster3;&#125;

	preg_match&#40;$muster, $testst, $treffer&#41;;

	if &#40;!empty&#40;$treffer&#91;0&#93;&#41;&#41; &#123;

	echo $treffer&#91;0&#93;."<br>\n"; 
    &#125;
&#125;

/* Ausgabe&#58; 
  
   Max Mustermann.
   Paul Mustermann-Krammer
   Heidi-Ärenika Musterfrau-Übach
*/
?>
Zur Überprüfung eines Formulars könnte es bereits reichen, zum Durchsuchen von Dateien wäre es noch nicht ausreichend.

Und wie viele Namen gibt es, die mit Umlauten beginnen? Könnte man eventuell bei den Anfangsbuchstaben weglassen, damit die Muster kürzer werden.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 25.02.2012, 18:06

Denke, so sollte es richtig sein. Hatte schon mal ein Tutorial über RegEx begonnen, das werde ich mal heute mit einer zweiten Seite fortsetzen. Wäre die Frage nicht gekommen, hätte ich mir die Fortsetzung des Tutorials für spätere Zeiten aufgespart.

Code: Alles auswählen

<?php

if &#40;isset&#40;$_GET&#91;"namen"&#93;&#41; and !empty&#40;$_GET&#91;"namen"&#93;&#41;&#41; &#123;

$teststr = trim&#40;$_GET&#91;"namen"&#93;&#41;;

$muster1 = "/&#40;\A&#40;&#91;A-Z&#93;&#123;1&#125;&#41;&#40;&#91;a-zäöüß&#93;+&#41;\s&#123;1,2&#125;&#40;&#91;A-Z&#93;&#123;1&#125;&#41;&#40;&#91;a-zäöüß&#93;+&#41;\Z&#41;/";
$muster2 = "/&#40;\A&#40;&#91;A-Z&#93;&#123;1&#125;&#41;&#40;&#91;a-zäöüß&#93;+&#41;&#40;\s&#123;1,2&#125;|-&#123;1&#125;&#41;&#40;&#91;A-Z&#93;&#123;1&#125;&#41;&#40;&#91;a-zäöüß&#93;+&#41;&#40;\s&#123;1,2&#125;|-&#123;1&#125;&#41;&#40;&#91;A-Z&#93;&#123;1&#125;&#41;&#40;&#91;a-zäöüß&#93;+&#41;\Z&#41;/";
$muster3 = "/&#40;\A&#40;&#91;A-Z&#93;&#123;1&#125;&#41;&#40;&#91;a-zäöüß&#93;+&#41;&#40;\s&#123;1,2&#125;|-&#123;1&#125;&#41;&#40;&#91;A-Z&#93;&#123;1&#125;&#41;&#40;&#91;a-zäöüß&#93;+&#41;\s&#123;1,2&#125;&#40;&#91;A-Z&#93;&#123;1&#125;&#41;&#40;&#91;a-zäöüß&#93;+&#41;&#40;\s&#123;1,2&#125;|-&#123;1&#125;&#41;&#40;&#91;A-Z&#93;&#123;1&#125;&#41;&#40;&#91;a-zäöüß&#93;+&#41;\Z&#41;/"; 


$i = 1;

for &#40;$i; $i <= 3; $i++&#41; &#123;

	if &#40;$i === 1&#41; &#123;$muster = $muster1;&#125;
	if &#40;$i === 2&#41; &#123;$muster = $muster2;&#125;
	if &#40;$i === 3&#41; &#123;$muster = $muster3;&#125;

	preg_match&#40;$muster, $teststr, $treffer&#41;;

	if &#40;!empty&#40;$treffer&#91;0&#93;&#41;&#41; &#123;

	echo htmlentities&#40;$treffer&#91;0&#93;, ENT_QUOTES&#41;."<br>\n<br>\n"; 
    &#125;
&#125;&#125;

echo "\t<form name=\"Eingaben\" action=\"".basename&#40;$_SERVER&#91;"PHP_SELF"&#93;&#41;."\" method=\"get\" accept-charset=\"iso-8859-1\">\n".
     "\t<input type=\"text\" name=\"namen\" value=\"\" size=\"30\" maxlength=\"58\">\n".
     "\t<input type=\"submit\" value=\"Test\">\n".
     "\t</form>\n\n";
?>
Alle Eingaben, die nicht den Beispielen von Paul Mustermann bis Hans-Paul Mustermann-Krammer entsprechen, werden nicht ausgegeben. Auf Umlaute als Anfangsbuchstaben von Namen wurde verzichtet, da wohl eher eine Seltenheit. Das Beispiel beruht auf ein Dokument mit der Zeichenkodierung ISO-8859-1:

Code: Alles auswählen

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag