Autor Zpráva
quatzael
Profil
Regulární výrazy prakticky vůbec neumím. Můžete mi prosím někdo poradit jak zkontrolovat jestli bylo zadáno správně:
číslo popisné/číslo orientační

Takže např. aby to bralo: 1022/47

Napadlo mě tohle:
[0-9]+[/][0-9]+

ale chtěl bych, aby to fungovalo tak, že by stačilo zadat jenom číslo popisné. Tedy buď oboje včetně lomítka mezi nebo jenom popisné.
Radek9
Profil
quatzael:
/^(\d+(\/\d+)?)$/
Joker
Profil
quatzael:
K tomu poznámka, číslo orientační a možná i popisné nemusejí tvořit jen číslice, např. 19a.
quatzael
Profil
Radek9:
asi jsi myslel jenom: ^(\d+(\/\d+)?)$ Jinak to nefunguje..

Joker:
To je pravda.. A jak by to teda prosím bylo i včetně těch písmenek?
anonymníí
Profil *
quatzael:
asi jsi myslel jenom: ^(\d+(\/\d+)?)$ Jinak to nefunguje..
Nepoužívej ereg_ funkce, ale preg_. Pak zjistíš, že ta lomítka tam musejí být, jsou to delimitery. Nebo jiné delimitery krom lomítka, abys ho nemusel escapovat.

A jak přidat písmenko? To je jednoduchý úkol, proč se nezkusíš trochu zamyslet, jak by to mohlo být? Mohl bys na to přijít sám.
quatzael
Profil
anonymníí:
Nepoužívej ereg_ funkce, ale preg_.
Já jsem to testoval na regexp.cz, tam to s těma lomítkama nebralo..

A jak přidat písmenko? To je jednoduchý úkol, proč se nezkusíš trochu zamyslet, jak by to mohlo být? Mohl bys na to přijít sám.
No nevím, kdyby tam bylo [0-9], tak z toho udělám [0-9A-Z], ale takhle fakt nevím..


anonymníí:
/^(\w+(\/\w+)?)$/ nebo /^(\S+(\/\S+)?)$/ ??
anonymníí
Profil *
quatzael:
Na té stránce je uvedeno: „PCRE výraz bude automaticky vsazen do lomítek jako oddělovačů, /regexp/, max. 1000 bajtů“. Ta lomítka (delimitery, oddělovače) se tam přidávají už v aplikaci.

Co se toho písmenka týče, je to \d[a-z]. Doporučuji přidat i modifikátor i, aby bylo validní 19a i 19A.


Respektive povinné číslo a volitelné písmenko

\d+[a-z]?
quatzael
Profil
anonymníí:
A to íčko? Respektive jak to prosím bude celý? Tohle jde opravdu mimo mě..
Joker
Profil
quatzael:
Tak překvapivě:
^(\d+(\/\d+[a-zA-Z]?)?)$

Ono to v podstatě není „číslice nebo písmena“, ale „číslice volitelně následovaná písmenem“. Písmeno může být jen na konci (BADF00D není platné číslo orientační) a můj regulár uvažuje maximálně jedno písmeno (formálně je asi přípustných i víc písmenek, pokud by se vyčerpala celá abeceda, ale reálně jsem neviděl, že by někde došli dál, než k „d“).
anonymníí
Profil *
quatzael:
Moc jsi se nekoukal na odkazy, které máš výše, že?

~^(\d+(\/\d+[a-z]?)?)$~i
quatzael
Profil
Joker:
Supr, díky. Tak doufejme, že neexistujou nějaký kinky adresy jako např. 1022/10XXX:o)
Každopádně, jseš si stopro jistej, že tam nemůže být více jak jedno písmenko, tzn. 1022/10AA, případně nějaký další kombinace s číslama, např.: 1022/10A4?


anonymníí:
Na jaký odkazy? To Tvoje je ale asi to samý jako od Jokera, ne?

Napadlo mě ještě:
^(\d+(\/\d+[a-zA-Z]*\d*)?)$

Je to tak správně, aby tam fungovalo i ty varianty s více písmenkama nebo číslice za písmenem?
Např: 1022/10AA a 1022/10A4?
Joker
Profil
quatzael:
Písmeno je vždycky na konci. A koukám podle Wikipedie může písmeno být jen jedno a dává se v případě, že je potřeba vložit nové orientační číslo do už přidělené řady.
Str4wberry
Profil
Související: Regulární výraz pro adresu

Jinak už se to tu několikrát řešilo:

Parsování adresy
Chytrý explode adresy
Kontrola správně zapsaného čísla ulice - regulární výraz

Mimochodem, k čemu je takové počínání s adresou v praxi dobré?
Joker
Profil
Tak takové validace jsou někdy užitečné… Hlavně když je nejasně popsaný formulář a není zřejmé, kam se má co vyplnit.

I když je pravda, že to často autor naopak zazdí nějakou geniální chybovou hláškou (např.: „Některá pole nejsou správně vyplněna“, samozřejmě bez indikace, kde je problém).
quatzael
Profil
Joker:
Aha, tak snad se to v blízké budoucnosti nebude nijak měnit..

Str4wberry:
No jde o prostý překontrolování. Potom možná ještě budu adresu kontrolovat pomocí webové služby, ale tohle je jenom pojistka, aby tam lidi nepsali úplný blbosti.


Joker:
Já to tam mám napsaný jasně v nápovědě. Spíš jde o to, aby nemuseli lidi vždycky vyplňovat i orientační číslo. Nejsem si jistej, ale myslím, že v nějakých menších Kotěhůlkách snad ani žádný orientační čísla nejsou.
Keeehi
Profil
quatzael:
A co mezery? To ho to necháš opravovat, když je tam někdo vloží? A co když ta dvě čísla místo lomítkem oddělí mezerou? Ano, je možné to po něm chtít ale proč, když to zvládneš vyřešit. Ubírá to na user experience.

Joker:
Hlavně když je nejasně popsaný formulář a není zřejmé, kam se má co vyplnit.
To ale není důvod pro to tvořit validaci ale je to důvod aby se ten formulář přepracoval tak, aby to zřejmé bylo.
Str4wberry
Profil
Vzhledem k tomu, že zvyklosti v psaní adres jsou dost proměnlivé, přijde mi, že nějaká obdobná validace může napáchat dost škod. Třeba když její tvůrce počítá s tím, že každý má co uvést do kolonky ulice. :–)

Poštovní adresa je v praxi dost tolerantní. Když si budu chtít něco poslat na vesnici, stačí mi uvést jen příjmení a PSČ. Když po mně kontrola bude chtít něco navíc, už je to zbytečné obtěžování.

Když si PSČ nebudu pamatovat, bude asi vhodné kromě názvu obce uvést ještě nějaké větší město v okolí, protože nejspíš může existovat více obcí téhož názvu.

Přijde mi tedy, že rozdělovat poštovní adresu na kolonky je dost samoúčelné a v praxi zbytečné až škodlivé. Striktní kontrola právě povede k tomu, že si budu muset vymýšlet blbosti, abych prošel validačním pravidlem.

Pokud se nebavíme o doručovací adrese, ale o způsobu, jak přesně označit nějaké místo – třeba polohu nemovitosti – je potom stejně potřeba spíš použít mapu a GPS souřadnice.
Keeehi
Profil
Ještě tu je jeden aspekt, pokud je pro mě správně vyplněná adresa důležitá, tak ji jako uživatel vyplním správně, pokud ji nechci vyplnit, tak není problém si vymyslet něco, co mi validací projde. Tudíž je to v důsledku úplně k ničemu. Dalo by se uvažovat o nějakém visuálním upozornění při vyplňování formuláře, ale nemělo by obtěžovat a už vůbec by nemělo znemožnit odeslání.
quatzael
Profil
Keeehi:
A co mezery? To ho to necháš opravovat, když je tam někdo vloží?
Mezery před kontrolou samozřejmě odstraním.

Str4wberry:
No, tak tady v mém případě bude muset dospělý svéprávný uživatel vyplnit svojí adresu trvalého bydliště. To snad je schopen vyplnit správně, a že by neznal PSČ? Tak si ho případně zjistí jinde. Když tam bude "vymýšlet" blbosti, tak mu to holt neprojde. Když nebude znát svou adresu trvalého bydliště, tak se holt podívá do občanky. A když už bude tak marnej, že nebude ani vědět, že jí má hledat v občance, tak prostě smůla..

Mimochodem tu kontrolu pak budu dělat trochu sofistikovaněji, tzn. že kdyby neseděly ty čísla (čp a čo), tak je zkusím prohodit apod.
anonymníí
Profil *
quatzael:
Zrovna PSČ v občance není.
Joker
Profil
quatzael:
Když tam bude "vymýšlet" blbosti, tak mu to holt neprojde.
Jde o to, proč to ten uživatel chce dělat. Když si bude vymýšlet blbosti, nejspíš kvůli tomu, že nechce zadat skutečnou adresu.
V takovém případě bych například já nezadával adresu třeba „abc 1, 11111 abc“, ale spíš třeba „Krátká 1, 10000 Praha“ (Krátká je pomalu v každém druhém městě, v Praze je i Dlouhá, Široká, Úzká, atd.) a žádná validace nemá šanci.
Keeehi
Profil
Joker:
Přesně tak, v úplně nejhorším případě si otevřu google mapy, někam si píchnu značku a odtamtud adresu opíšu. Bude to reálná adresa, takže validací musí vždy projít (protože pokud validací neprocházejí reálné adresy tak to není validace) ovšem vlastně to bude ta blbost protože ke mě nemá žádný vztah. Jediné, čeho tak dosáhneš bude to, že budeš mít databázi zase plnou nesmyslů, jen ty nesmysly budou ne první pohled vypadat uvěřitelně. Jestli je toto tvým cílem, pak směle do toho, jestli ne, tak se na to rovnou vykašli.
quatzael
Profil
anonymníí:
Zrovna PSČ v občance není.
Proto taky píšu, že si to může zjistit někde jinde:o)

Keeehi:
Jestli je toto tvým cílem, pak směle do toho, jestli ne, tak se na to rovnou vykašli.
No tak píšeš to Jokerovi, ale zřejmě to bylo mířeno na mě. Prostě jde o to, že tu adresu v mnoha případech potom musím poslat pomocí webové služby, kde se provede validace adresy, takže když tam někdo napíše nějaký nesmysl, tak to prostě neprojde.

Já tam nechám v tom formuláři uživatelům jistou volnost, tak aby když například ty hodnoty prohodí, tak abych si to sám zvalidoval a ověřil jaká varianta je správná.

Já nepotřebuju sbírat adresy do databáze. Adresa je prostě nutností a to jestli tam napíše uživatel schválně blbosti, protože chce udělat fakeovou objednávku, tak mě to vůbec nebolí. Pro mě jsou stejně relevantní jen Ti klienti, kteří zaplatí. Všechno ostatní je jenom noise..


Joker:
... a žádná validace nemá šanci.
No tak já si potom můžu toho klienta ověřit i jinak. Podle rodného čísla apod. Takže poznám, jestli je to real nebo fake. Když někdo bude hrát tuhle hru až úplně do konce s tím, že pošle i peníze, tak s tím taky nemám žádnej problém:o)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0