Empfehlungen: Erweiterte Suche

Eigene Validierungsregel

Datenbankobjekte strukturieren und validieren

Eigene Validierungsregel

Beitragvon getit » Mi 18. Feb 2009, 10:25

Hallo,

ich möchte die Eingabe in meine Nachname-Textfeld auf best. Zeichen begrenzen.
Der Nachname muss mit einem Großbuchstaben beginnen (A-Z -> /^[A-Z]/), dabei sind aber auch Umlaute erlaubt (z.B. 'Özmir' -> /^[A-ZÄÖÜ]/).

Leider funktioniert das nicht.
Folgendes Resultat:
'' -> falsch (Leerstring - reg. Ausdruck arbeitet korrekt)
'a' -> falsch (Kleinbuchstabe - korrekt)
'A' -> korrekt (Großbuchstabe - korrekt)
'Ö' -> falsch (Großbuchstabe(Umlaut) - reg. Ausdruck arbeitet nicht korrekt)

Ich gehe mal davon aus, das der reguläre Ausdruck soweit korrekt ist.
Wieso funktioniert das mit Umlauten nicht?
Gibt es einen Workaround?
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Eigene Validierungsregel

Beitragvon euromark » Mi 18. Feb 2009, 19:21

*LOL*
das ist aber nich gerade userfreundlich

ich würde einfach manuell danach den ersten buchstaben groß setzen
vor dem speichern - fertig, damit spart man sich einen unnötigen error
also jetzt speziell auf dein ersten Fall bezogen

außerdem halte ich diesen ansatz für völlig falsch - davon mal abgesehen
nachnamen (generell namen von usereingaben) validiert man doch nicht mit solchen reg. expr
es gibt zu viele verschiedene fälle von möglichkeiten, selbst im deutschen raum
eingedeuschte chinesische, russische und CO
die haben halt nunmal ein accent ^ é è etc oder Bindestriche im Namen - gibt da über 100 möglichkeiten
und es macht keinen sinn, ihm zu sagen dass er mal seinen nachnamen ändern soll, damit dein formular damit zurecht kommt :)
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Eigene Validierungsregel

Beitragvon getit » Mi 18. Feb 2009, 20:58

@euromark
Danke für Deine Antwort.

Macht schon Sinn, die Eingaben nicht durch ne Regex zu begrenzen.
Aber wie kann ich sicher gehen, das zb. keine Ziffern eingegeben werden?
cake kennt leider keine Validierungsregel dafür (alphanumeric, numeric - aber kein alpha).
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Eigene Validierungsregel

Beitragvon euromark » Mi 18. Feb 2009, 23:39

ich vermute mal dass
define('VALID_ALPHA_SPACE_MINUS','/^[a-zA-Z -]+$/');
nich ganz hinhauen wird, weil damit zwar keine zahlen erlaubt sind, aber
vermutlich noch zu viel anderes gefiltert wird
vielleicht eher auf Zahlen prüfen und wenn welche drin sind, einen Fehler zurückgeben?
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Eigene Validierungsregel

Beitragvon getit » Do 19. Feb 2009, 09:24

@euromark
Danke für Deine Hilfe!

[a-zA-Z -]

- Wieso nen Minus?
- Jetzt sind doch wieder keine Umlaute erlaubt?
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Eigene Validierungsregel

Beitragvon euromark » Do 19. Feb 2009, 12:34

wie gesagt, so oder so wird zu viel gefiltert
nämlich eben alle besagten sonderzeichen die offiziell teil des nachnamens sein dürfen

das minus weil es ja Müller-Westernhagen, also Doppelnamen im Nachnamen geben kann

ich würde auf strenge validierung hier verzichten - wenn dann den umgekehrten fall
zeichen ausschließen die definitiv da nix zu suchen haben: @ ? % $ etc
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Eigene Validierungsregel

Beitragvon getit » Do 19. Feb 2009, 14:16

Danke!!

Nachtrag:
Ich habe rausgefunden, wie ich Unicode-Zeichen suchen kann.

Code: Alles auswählen
/^(\p{Lu}[\p{Ll}]+)$/u

Dieser regex findet Strings die mit
1 Großbuchstaben mit
beliebig vielen Kleinbuchstaben

Hier noch ne kurze Erklärung der regex:
Code: Alles auswählen

\p{L} => a single unicode char
u|l => uppercase|lowercase letter
/^/ => match at start
/$/ => match at end
u => u modifier (search with unicode support)
 
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Eigene Validierungsregel

Beitragvon getit » Fr 20. Feb 2009, 05:23

:D Jetzt hab ich die Lösung :D

Code: Alles auswählen
/^\p{Lu}(\p{Ll})+([-| ]\p{Lu}\p{Ll})*$/u


Findet zb.:
Ás Üs
Ösmir-Bal

d.h. Ein Großbuchstabe (auch unicode) und dann bel. viele (aber mind. 1) Kleinbuchstabe.
Folgt darauf ein '-' oder ein ' ', so muss darauf wieder ein Name (Großbuchstabe gefolgt von Kleinbuchstaben) folgen. Dies kann sich bel. oft (auch 0mal) wiederholen.
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Eigene Validierungsregel

Beitragvon Mathias » Fr 20. Feb 2009, 13:22

Das klingt super :) Könntest du die ganze Regel mal posten? Zufälligerweise hab ich nämlich genau so ein Anliegen bezüglich Namen.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Eigene Validierungsregel

Beitragvon getit » Fr 20. Feb 2009, 15:12

Im Model einfach eintragen:

Code: Alles auswählen

var $validate = array(
    'last_name'         =>  array(
        'rule'              =>  array('custom', '/^\p{Lu}(\p{Ll})+([-| ]\p{Lu}\p{Ll})*$/u')
    )
);
 


Auf dieser Seite http://www.regular-expressions.info/unicode.html unter dem Punkt "Unicode Character Properties" (etwa Ende des 1. Drittels vom Text) findest du noch mehr Möglichkeiten.
Zuletzt geändert von getit am Fr 20. Feb 2009, 15:50, insgesamt 1-mal geändert.
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Nächste

Zurück zu Models

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast