Autor Zpráva
Iver
Profil
Dobrý den. Chci do patternu formuláře přidat regex výraz, který zajistí, že projde jen například "Jan Novák".

S tím že začáteční písmena by měla být velká, jméno by mělo být složeno ze dvou částí s mezerou mezi nimi a výraz by měl podporovat i diakritiku. Slovenskou, nebo českou, to je jedno. To už bych si doplnil.

Poradil by někdo s realizací? Na výrazy opravdu nejsem. Tak v tom tápu :/
jenikkozak
Profil
Lépe by bylo jen kontrolovat, jestli zadaná hodnota obsahuje alespoň jednu mezeru. Okolo 40 000 obyvatel ČR má totiž dvě příjmení. Žije tu také přes 6000 lidí, kteří mají dvě příjmení spojená pomlčkou nebo spojovníkem. Záleží na použití formuláře, ale pokud si lidé budou myslet, že jde o poštovní adresu a nebudeš mít speciální políčko pro zadání titulu, mnozí se ho budou snažit ke jménu přidat a nebude správné jim to zakazovat. Takže bys musel navíc povolit čárku a tečku. Nechat stránku „nadávat“ uživatelům za to, že nepoužijí velké písmeno, je takové… zbytečné. Dokážeš ho totiž doplnit automaticky - velké písmeno je na začátku, za mezerou, pomlčkou, případně tečkou (pokud mezi titulem a jménem neudělají mezeru).
peta
Profil
Tady mame cloveka se 4 slovnym jmenem a prijmenim. Spousta lidi ma treba spojeni Johan von Kracmar nebo Charles o' Hara. Pri spatnem kodovani s diakritikou mozna bude problem a bude treba vypsat vsechny znaky s diakritikou. Pred tim bys mel vstup prohrat pres trim.
[A-ZĚŠČŘŽÝÁÍÉ][a-zěščřžýáíé]+\s[A-ZĚŠČŘŽÝÁÍÉ][a-zěščřžýáíé]+
A-Z ... pismena A az Z
ĚŠČŘŽÝÁÍÉ ... ostatni znaky
+ ... opakovani 1 az nekonecno
\s ... mezera
(nekde funguje \w i pro diakritiku, ale ty stejne potrebujes jen tu cast, ktera ma velka pismena, takze takova zkratka asi nepujde pouzit)
Pekne to vysvetluji slajdy pro js reg
http://www.visibone.com/regular-expressions/
http://www.regexp.cz/
Joker
Profil
peta:
ĚŠČŘŽÝÁÍÉ ... ostatni znaky
Trochu málo těch znaků.

\s ... mezera
Není. Mezera je mezera („ “).
\s je bílý znak, což kromě různých typů mezer může být form feed, různé typy odřádkování, tabulátorů, nebo oddělovač odstavce.
Teoreticky Iver může opravdu chtít libovolný bílý znak, ale pravděpodobně chce konkrétně mezeru a pak je \s špatně.

Iver:
Takže třeba Robert De Niro není platné jméno?
Možná bych to raději řešil řetězcovými funkcemi, protože regulární výraz bude docela vopruz sestavit (viz peta a to tam ještě část písmenek nemá).
Kdyby to bylo v PHP, šlo by udělat explode mezerou, pak se dá zjistit, kolik jich tam je, a první velké písmeno a ostatní malá jde zařídit přes ucfirst(strtolower("řetězec")), případně porovnat (ucfirst(strtolower("řetězec")) == "řetězec")
Iver
Profil
Jde o to, že chci kontrolovat HTML5 formulář ještě před odesláním. Samozřejmě může být i více jmen, ale tam se to ještě komplikuje s diakritikou a apostrofem.
Chamurappi
Profil
Reaguji na Ivera:
chci kontrolovat HTML5 formulář ještě před odesláním
Čemu se říká HTML 5 formulář?

Samozřejmě může být i více jmen
I méně. Jaký smysl ta kontrola má? Upozornit člověka, že omylem zapomněl napsat kus svého jména, ještě před odesláním? To je reálný scénář?
Iver
Profil
HTML5 formulář podporuje u tagu input pattern. Smysl to má v tom aby byl správně ošetřen formulář ještě před odesláním? Moc nerozumím dotazu. Přesně proto, aby nikdo nezadával jedno jméno, ale dvě a více a nemusel jsem vše řešit ověřením dat po odeslání, následném vypsání chyby a doplnění správných dat opět do formuláře. K tomu ještě PHP skript na úpravu začátečních písmen a zjištění mezer ve jméně. No nezdá se mi to jako řešení hodno programátora, když stačí jeden regex výraz.
_es
Profil
Iver:
Overenie vstupov z prehliadača musíš robiť aj tak vždy aj na serveri.
Iver
Profil
To nechápu proč? Jednoduše ho uložím do databáze. PHP nebo jiný kód jméno obsahovat nemůže díky regexu.
_es
Profil
Iver:
Tak buď meno kontrolovať chceš a vtedy je nutná aj kontrola na serveri, alebo ho kontrolovať nechceš a nekontroluješ nikde.
Iver
Profil
Já přeci jen zkontroluji jméno na straně klienta. Když projde, uloží se. Proč bych ho kontroloval ještě jednou na straně serveru, když jinak neprojde? Maximálně mohu odstranit případný kód kdyby se někomu podařilo propasovat POST dotaz jiným způsobem. Ale nebudu kvůli tomu obtěžovat uživatele. Takhle se mu jednoduše ihned po zadání zobrazí bublina "Údaj není ve správném formátu".

Nechápu užitečnost těchto reakcí. Já sem přišel s jasným cílem, aby mi zkušenější uživatelé poradili jak by to sami udělali, popřípadě jak už to jednou vyřešili. Za to kolegům v prvních příspěvcích děkuji a snad to nějak poskládám.
Chamurappi
Profil
Reaguji na Ivera:
Přesně proto, aby nikdo nezadával jedno jméno
Takže třeba Teller má smůlu?

nemusel jsem vše řešit ověřením dat po odeslání, následném vypsání chyby a doplnění správných dat opět do formuláře
To stejně udělat musíš, protože podpora patternu není (a nikdy nebude) stoprocentní, uživatel může poslat data i jinou cestou. To vážně nevíš?
Kontrola na straně klienta by měla být třešinka na dortu zlepšující použitelnost, což teda zrovna ověření velkých písmen není.
Iver
Profil
Teller? Přijdu na úřad s tím že mé jméno je Teller, JT nebo TT? I Madonna má jméno a přijmení.

Ano jak jsem psal. To odstraním jen případný kód. Ale nebudu jednomu políčku obnovovat stránku.

To že mnoho lidí si neaktualizuje prohlížeče a používá 10 let starý IE6 nebo brouzdá na linuxu v textovém prohlížeci, za to přeci nemůžu.

HTML5 už teď funguje ve všech moderních prohlížečích. I mobilních. Tak nevidím důvod proč se spoléhat jen na PHP. Ano ještě jednou si to zkontroluje, ale to jen to, aby nikdo nemohl podstrčit zdrojový kód. Ne aby kontroloval formát.
_es
Profil
Iver:
To že mnoho lidí si neaktualizuje prohlížeče a používá 10 let starý IE6 nebo brouzdá na linuxu v textovém prohlížeci, za to přeci nemůžu.
Ne aby kontroloval formát.
No ale pre všetkých návštevníkov s tými zastaralými prehliadačmi ti tá kontrola formátu potom nebude fungovať. Aký má potom zmysel? Nehľadiac na to, že aj v tých „moderných“ prehliadačoch sa dá tá kontrola jednoducho obísť.

Teller? Přijdu na úřad s tím že mé jméno je Teller, JT nebo TT? I Madonna má jméno a přijmení.
To bude tvoj web určite veľmi dobrý, ak si myslíš, že presvedčíš Madonnu, aby sa na ňom zaregistrovala svojimi občianskym menom.:-)
Chamurappi
Profil
Reaguji na Ivera:
I Madonna má jméno a přijmení.
Ale Teller nemá. Ani oficiálně. Jeho celé občanské jméno je Teller.
Proč je pro tvoji aplikaci důležité, aby měl člověk dvě jména? Ty ta jména nějak dál analyzuješ?

To že mnoho lidí si neaktualizuje prohlížeče a používá 10 let starý IE6 nebo brouzdá na linuxu v textovém prohlížeci, za to přeci nemůžu.
Tvoje chyba samozřejmě je, že se cílovým zařízením nepřizpůsobíš, ale to je jiná otázka. Protože vytváříš de facto bezpečnostní díru. (I když to nebude přímo XSS díra.)

HTML5 už teď funguje ve všech moderních prohlížečích. I mobilních.
Atribut pattern nepodporuje ani Explorer 9, takže se kontrola neprovede asi tak u každého čtvrtého uživatele.
Mezi lidmi je ohromná spousta starších Androidů, jejichž výchozí prohlížeč také podporuje málo formulářových novinek.
jenikkozak
Profil
Iver:
Tímto způsobem nedonutíš uživatele k tomu, aby si tam jméno napsal. Pokud mu nedovolíš jednoslovnou hodnotu, bude ti tam psát kraviny jako Baráček Obamáček nebo tam napíše jmého své tchýně. Nevím, za jakým účelem jména sbíráš, ale pokud je chceš použít třeba na poštovní adresy, neměl bys uživatele motivovat k tomu, aby nesmyslné hodnoty maskovali. Pak je totiž těžko najdeš.

Mně se osvědčilo používat zadané jméno pro oslovení v pátém pádě. Hned po registraci ho uvítám, např. „Pane Nováku, děkujeme za Vaši registraci, bla bla,“ shrnutí registrace nebo ověřovací kód mu pošlu e-mailem, kde ho opět oslovím. Spousta lidí se pak vrátila a hledala, kde můžou své jméno opravit. Účinnost to může mít tak 20, maximálně 30 %, víc asi ne. Ale výhoda je v tom, že nesmyslné hodnoty zůstávají do očí bijící, takže si jich všimnu dřív, než lepím štítek s adresou na balík.
Joker
Profil
Chamurappi:
Takže třeba Teller má smůlu?
Nemá, přece Iver píše, že kontrola se dělá jen na klientovi.
Takže Teller, nebo třeba Ferdinand Zvonimír Habsburg-Lothringen (anebo někdo, kdo chce zadat třeba „qwert“), by prostě museli tu kontrolu na klientovi vyřadit :-)

To že mnoho lidí si neaktualizuje prohlížeče a používá 10 let starý IE6 nebo brouzdá na linuxu v textovém prohlížeci, za to přeci nemůžu.
Samozřejmě že ano. Aplikace má zajistit validitu dat.
Jestli validace dat má být postavená na tom, že si to návštěvník sám zkontroluje a odešle to správně, není třeba se trápit s nějakými skripty.
Stačí k políčku připsat „Prosím, nezadávejte nesmyslné údaje“.
_es
Profil
Joker:
Takže Teller, nebo třeba Ferdinand Zvonimír Habsburg-Lothringen (anebo někdo, kdo chce zadat třeba ‚qwert‘), by prostě museli tu kontrolu na klientovi vyřadit :-)
Stačí, aby použili IE9 a nemusia nič „vyraďovať“.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: