Pomoc s regulárními výrazy...
|
17.3.2010 14:04
Lukáš Klimovič
|
Ahoj všem,
potřeboval bych pomoct s regulárními výrazy potřebuji ošetřit hodnoty
Jméno (aby bylo počáteční vždy velké)
Příjmení (aby bylo počáteční vždy velké)
Město (velké počáteční písmeno, několikaslovné atd.)
Ulice (velké počáteční písmeno, několikaslovné a číslo domu nakonci)
PSČ (5 čísel, možno s mezerou)
E-mail (...)
Už jsem s tím začal, ale hlasí to chyby
if
(ereg("^[A-Z]{1}[a-z]*$",$jmeno)
and ereg("^[A-Z]{1}[a-z]*$",$prijm)
and ereg("^[A-Z]{1}[a-z]*$",$mesto)
and ereg("^([A-Z]{1}[a-z]*){1,5},? {1}[0-9]{1,6}$",$ulice) //tady je možná problém s tou mezrou mezi ...,? × {1}[0-9]...
and ereg("^[0-9]{3} ?[0-9]{2}$",$psc) //to samé...
and ereg("^.+@.+\..+$",$mail)
)
{
... |
|
|
Re: Pomoc s regulárními výrazy...
|
17.3.2010 21:32
Aleš Hakl
|
Ja si treba myslim, ze validovat jestli jmeno zacina velkym pismenem je ponekud nesmyslny pozadavek, pokud vam na tom opravdu zalezi je pravdepodobne rozumnejsi proste pocatecni pismeno prevest na velke. Druha vec je, ze si lze predstavit naprosto platna jmena a prijmeni, ktera nemaji vlastnost, ze maji prave jedno velke pismeno a to na zacatku.
Pouzivat zapis {1} pro "prave jednou je nesmysl, protoze stejneho efektu muzete dosahnout tim, ze tam proste zadne opakovani nenapisete. Konstrukce [a-z] (a obdobne [A-Z]) vam da vsechny znaky, ktere se seradi dle nastaveni locales mezi a a z vcetne, coz nemusi nutne byt prave vsechna mala/velka pismena jak predpokladate (a mam za to, ze v ceske locale nejenomze jedno pismeno opomenete, ale navic maji velka a mala pismena stejnou vahu takze oboji vam da nejakou podmnozinu velkych i malych ceskych pismen). Pokud chcete znaky z nejake tridy pouzijte zapis [[:jmeno-tridy:]], treba [[:upper:]]
Mozna je dobry napad nepredpokladat, ze PSC ma nejaky konkretni format, obzvlast proto, ze cesky format NNN NN je ve svete spise vyjimkou. Dalsi vec je, ze majorita ceskych postovnich adres nezapada do vami predpokladaneho formatu ulice s cislem + mesto. Posledni radek adresy ma dle Ceske Posty specifikovat postu odpovidajici k danemu PSC, takze se tam vyskytuji retezce jako "Praha 411" nebo "posta Domasov u Brna", to druhe opravdu nazev mesta neni a to prvni vlastne take ne. Rozumny format jak zpracovavat adresy je vylozene freeform textove pole na dve nebo tri radky. Pokud bychom byli u te internacionalizace/globalizace, tak verte tomu, ze napriklad v rusku a japonsku se adresa pise v opacnem (logictejsim) poradi, tj. se vzrustajici specificnosti (a v nekterych oblastech japonska v postovni adrese neni uvedena ulice vubec a misto ni se uvadi v podstate souradnice domu).
A nakonec k oblibenemu tematu validovani emailove adresy: Regularni vyraz ktery <b>temer</b> kompletne popisuje protokolem SMTP povoleny format adresy je tohle. Racionalni zaver by byl, ze validovat emailovou adresu proste nema smysl |
|
|
|
Re: Pomoc s regulárními výrazy...
|
17.3.2010 21:33
Žaneta Severová
|
Podle meho nazoru je zbytecne validovat, zda jmeno a prijmeni zacina velkymi pismeny, protoze cim vic validaci na formulari je, tim vetsi je sance, ze nastane nejaky "vyjimecny" stav, se kterym validace neocekavaji. Napr. moje jmeno by vyse zminenou validaci neproslo urcite :) Pritom je to naprosto platne jmeno, dokonce se nachazi i v kalendari a urcite bych ho zadala i s velkym pismenem :) Pokud je tak nutne, aby jmeno a prijmeni velkym pismenem zacinalo, tak to lze osetrit programove, nic tak sloziteho to neni.
Dale je otazka, jestli validovat dohromady ulici s cislem. Taky mi to prijde takove divne. Opet treba retezec "U ohrady 3/1325a" neprosel a pritom se takove adresy vcelku bezne vyskytuji. Asi bych to dala do samostatnych poli a kontrolovala pouze vyplnil/nevyplnil. Pokud to uzivatel mysli s formularem vazne, tak tam spravne hodnoty vetsinou doplni dobrovolne, pokud ne, doplni tam blbosti at uz validni, nebo ne.
U PSC je otazka, zda to plati jen v ramci CR nebo celosvetove, protoze v zahranici tento format neni. Ono pokud byste to bral s tou validaci PSC vazne, tak uz to rovnou muzete kontrolovat podle zadane adresy a mesta napr. na webu ceske posty :) Coz je podle me uz uplny overkill, pokud se nejedna o nejakou "husto-enterprise aplikaci", kde je spravna adresa opravdu dulezita.
A co se tyce kontroly emailu, tak na webu je k nalezeni spousta regularnich vyrazu. Otazkou je, nakolik vsechny spravne splnuji specifikaci emailove adresy :)
Takze asi bych to s temi validacemi tak nehrotila a nedelala z uzivatele uplneho idiota, protoze to pak muze skoncit tim, ze programator udela idiota leda tak ze sebe :)
|
|
|
Re: Pomoc s regulárními výrazy...
|
17.3.2010 23:08
Lukáš Klimovič
|
Díky moc, už jsem si spoustu chyb uvědomil... Jen bych se chtěl ještě zeptat, jak definuju, co má a co nemá být vyplněné... |
|
|
Re: Pomoc s regulárními výrazy...
|
31.3.2010 16:44
Pavel `Goldenfish' Kysilka
|
zdravim,
to, co chcete se resi jinak, pokud chcete dosahnout urcite preciznosti.
Jmenuj se to UIR = "Uzemne identifikacni registr" - http://forms.mpsv.cz/uir/ .
Stahnete databasi adres a ty overujte. Samozrejme, ze se udaje v UIR meni. Tak to chce i synchronizovat.
Co se tyce jmen a prijmeni, tak to se jmenuje "Cetnost jmen a prijmeni".
http://www.mvcr.cz/clanek/cetnost-jmen-a-prijmeni.aspx?q=Y2hudW09Ng%3D%3D
Minimalne na tom otestujete svoje regularni vyrazy. Anebo muzete mit lokalni databasi a oproti te overujete.
Chtelo by to tedy dat moznost uzivateli vlozit neco, co neni v databasi a pak to schvalit. Pripadne pridat do database.
Ono je pekne, ze zvalidujete neco pres regularni vyraz. ted je otazka, zda treba adresa "Psi bouda 11" muze existovat.
Chce to si predem urcit, kde je kvalita database, kterou hledate. + pracnost, udrzba, atd.... Mnohdy take lide nevedi presne svoji adresu a pak nadavaji, ze to funguje spatne.
gf |
|
|
|
|
KOMENTARZE
|
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
|
|
Szukanie oprogramowania
|