You are not logged in.

  • Login

1

Thursday, August 23rd 2007, 5:04pm

Regulärer Ausdruck für Namen

Hallo,

ich schlage mich schon wieder mit den lieben Regulären Ausdrücken rum.
Ich möchte ein Formular Feld Namen überprüfen.

Dazu habe ich folgendes ausprobiert

PHP Quellcode

1
$name ='[a-zA-ZäöüÄÖÜ]';


aber irgendwie geht das nicht wirklich, den Sonderzeichen und Zahlen gehen auch :(
Ich glaube das muss man echt studieren, damit man das kapiert! Ich schlage mich schon ne Stunde damit rum!!

Gruß
Stephan

2

Thursday, August 23rd 2007, 5:06pm

In deinem Code seh ich jetzt auch irgendwie nur ne Stringzuweisung... ?(

3

Thursday, August 23rd 2007, 5:31pm

ja den setzte ich in die

PHP Quellcode

1
preg_match($name, "müller");


ein.

4

Thursday, August 23rd 2007, 6:24pm

Der Name geht von Anfang (^) bis Ende ($) und das Zeichen [a-zA-ZäöüÄÖÜ] wird mindestens 1x (+) wiederholt

PHP Quellcode

1
2
$name ='/^[a-zA-ZäöüÄÖÜ]+$/';
print preg_match($name, "müller") ? 'ja' : 'nein';

5

Thursday, August 23rd 2007, 6:27pm

Frag mich grade wofür du das brauchst? Der Asudruck sollte auf so ziemlich jedes Wort der deutschen Sprache zutreffen.

6

Thursday, August 23rd 2007, 6:55pm

Richtig, es sollen aber keine Zahlen oder Sonderzeichen enthalten sein. Man weiß ja nie was die User so eintippen wollen :-)

7

Thursday, August 23rd 2007, 7:16pm

print preg_match($name, "müller") ? 'ja' : 'nein';
Diese Schreib weise kenne ich nicht, ist erstaunlich was man hier alles lernt! Gibt es darüber auch Informationen?

8

Thursday, August 23rd 2007, 9:09pm

Naja da PHP die C Syntax teilweise adaptiert hat, gibt es dort auch die verkürzte Schreibweise: (bedingung) ? trueteil : elseteil Würde ich nur bei kurzen Zeilen wie in d0nuts Beispiel verwenden, dass kann man nämlich auch schachteln und dann wirds unübersichtlich. In C sieht man das oft bei einfachen Funktionen im return-Statement.

Bsp:

C/C++ Quellcode

1
2
3
int abs(int x) {
 return (x < 0) ? x*(-1) : x;
}

ist das gleiche wie:

C/C++ Quellcode

1
2
3
4
5
6
int abs(int x) {
 if (x < 0)
  return x*(-1)
else
 return x;
}

Man spart ein wenig Tiparbeit, aber wie gesagt, spätstens beim Schachteln wirds unleserlich.

Zu deinem RegEx: Kannst ihn als kleine Übung ja dann noch ein wenig verbessern, damit sich Leute nicht "---" nennen dürfen.

9

Thursday, August 23rd 2007, 11:59pm

Zu dem kurzen Code: Zumindest in PHP ist diese Schreibweise langsamer, also nicht immer besser. In C++ weiß ich das nicht genau, das lerne ich gerade noch..

10

Friday, August 24th 2007, 8:44am

Zumindest in PHP ist diese Schreibweise langsamer


Hallo,

hast Du irgend eine Quelle für diese Behauptung? Trifft das auf alle PHP Versionen zu?

melwood

11

Friday, August 24th 2007, 2:00pm

In C kann ich mir definitiv das nicht vorstellen. Ich bin mir fast sicher der Compiler erzeugt denselben Code bei beiden Schreibweisen.

Üblicherweise wird das "bedingter Ausdruck" genannt, PHP nennt es ind er deutschsprachigen Hilfe den "dreifach konditionalen Operator" (engl. "ternary conditional operator"). Wenn man im Internet danach sucht findet man eine Menge Zeugs, allerdings keinen Hinweis darauf dass es langsamer läuft und werde es erstmal so hingestellt lassen bis ich es ausprobiert hab.

In dem Kontext vielleicht ganz Interessant: http://www.phpvalue.com/what-is-php-ternary-opeartor/
Die beschreiben das Verhalten von PHP bei geschachtelten Ausdrücken als non-obvious (im weitesten Sinne also schwer nachvollziehbar), unterlegt mit ein paar Beispielen. Also gar nicht erst angewöhnen. In C verhält es sich meiner Erfahrung nach konsistent (habs da natürlich auch nie benutzt :P )

12

Sunday, August 26th 2007, 1:07am

Der Name geht von Anfang (^) bis Ende ($) und das Zeichen [a-zA-ZäöüÄÖÜ] wird mindestens 1x (+) wiederholt

PHP Quellcode

1
2
$name ='/^[a-zA-ZäöüÄÖÜ]+$/'; 
print preg_match($name, "müller") ? 'ja' : 'nein';
ha, und was, wenn man einen Doppelnamen hat, den man mit Leerzeichen oder Bindestrich verbinden möchte, von anderen Sprachen als der deutschen ganz zu schweigen - bei einem Namens-Eingabe-Feld braucht man doch eigentlich nur darauf zu achten, dass keine Zahlen und nicht 1 einzelner Buchstabe drinsteht, der Rest dürfte doch fast beliebig sein.

13

Sunday, August 26th 2007, 9:42am

Moin Moin,

mir ist die Schreibweise mit den "? und den : " nun auch in Büchern unter die Augen gekommmen, man nett das "ternäre Operator", das steht auch nicht das es langsamer oder schnell ist! Es ist einfach nur kürzer und an machen Stellen übersichtlicher.

Gruß
Stephan

Social bookmarks