Autor | Zpráva | ||
---|---|---|---|
martin6541 Profil |
Dobrý den.
Již několik měsíců mám na poli ve formuláři košíku u telefonního čísla nastaveno pravidlo pro zadávání čísla: pattern="^\+420\s?\d{9}$" Je technicky možné, aby to v některých případech nefungovalo? Jednou za měsíc se mi stane, že zákazník tvrdí, že ho to prostě nepustí. Jednou to bylo proto, že číslo vkládal i s mezerou na konci, které si nevšiml. 2x to bylo u uživatele, který byl přihlášen a na proflu měl uloženo číslo špatně. Ale je opravdu technicky možné, aby když do pole napíšu +420123456789 tak mi to vyskočilo jako neplatné? Jde mi spíš o to, jestli mám hledat nějakou technickou chybu, nekompatibilitu prohlížeče, plugin v prohlížeči, antivir, firewall... nebo řešit samotného uživatele. |
||
Radek9 Profil |
#2 · Zasláno: 19. 10. 2022, 10:11:52
martin6541:
„Ale je opravdu technicky možné, aby když do pole napíšu +420123456789 tak mi to vyskočilo jako neplatné?“ Tohle by podle mě možné být nemělo. Ale jsi si jistý, že to zadával takhle? Hromada lidí by to klidně mohla napsat jako "+420 123 456 789", tedy s mezerami mezi trojčíslími, což už přes tvůj pattern neprojde. |
||
anonym_ Profil * |
#3 · Zasláno: 19. 10. 2022, 10:21:26
martin6541:
Přesně tak. U tel. čísla je ten pattern poměrně náročný a různorodý. Osobně jsem pro variantu, která kontroluje jen povolené znaky (0-9, mezera, +, možno rozšířit o závorky a pomlčku) a délku minimálně 9+ znaků. |
||
martin6541 Profil |
#4 · Zasláno: 19. 10. 2022, 10:37:49
řeším jen to, že.... volá zákazník a tvrdí, že to zadává správně a nepustí ho to. Já potřebuji jistotu, že není technicky možné, že to zadá správně a nepustí ho to :)
Pokud mi řeknete, že to prostě nejde zadat správně a mít problém, tak mám jistotu, že chyba je mezi zákazníkem a jeho klávesnicí a mohu to řešit. PS: Pro jistotu si u dopravce ověřím, jestli by tam snesl nějaké mezery a upravil bych to. PS2: V popisku píšu návod, jak to zadat a ještě mám placeholder, kde to vidí. |
||
anonym_ Profil * |
#5 · Zasláno: 19. 10. 2022, 10:44:14
martin6541:
Nech uživatele zadat formát, na který je zvyklý a který ti tam i přes popisek a placeholder (ten se ztratí, takže není vidět) vloží a pro dopravce to pak případně uprav ty. Zahodit mezery, závorky, pomlčku atd. je poměrně snadné. Přidat trim, nahradit počáteční 00420 za +420 též. A doplnit +420 tam, kde to na začátku není, taky. Já třeba některá čísla znám (a píši) jen ve formátu XXX XX XX XX, protože jsou natolik hezká, že u nich formát XXX XXX XXX neznám, resp. si ho nepamatuji. Pokud mi tvoje aplikace tohle nevezme, nakoupím u konkurence a tvůj klient ti poděkuje :-) A závěrem, nemělo by být technicky možné, aby byl ten pattern ignorován tím stylem, že nepustí dobrý vstup. Takže zákazník pravděpodobně kopíruje a má tam nějaký bílý znak na začátku/konci, mezeru navíc, cokoliv. |
||
martin6541 Profil |
#6 · Zasláno: 19. 10. 2022, 11:48:46
anonym:
Asi máš ve všem pravdu. Vše tohle vzniklo jen skrz dopravce, který prostě vyžaduje pouze české telefonní číslo a v tomto zápise. To mazaní mezer a podobně vypadá lákavě, ale asi nebude tak jednoduché a nedělá se stejnou, metodou, že? |
||
anonym_ Profil * |
martin6541:
Asi by to šlo lépe, až tak dobrý nejsem (nejsem programátor), ale jako základ by to mohlo být třeba nějak takhle: <?php $str = [ '123456789', // OK '+420 (605) 44 33 22', // OK '00420 000 999 888', // OK '123254', // KO (kratke) '123254342334234343', // KO (dlouhe) '605 AAA 123 123', // OK, 'AAA' se zahodi a zbyde spravne cislo -- dalo by se udelat i KO, pokud bys jako prvni kontroloval nevalidni znaky misto jejich odstraneni '605 AAA 123', // KO - po odstraneni 'AAA' kratke '605-123456', '123123123' ]; foreach ($str as $s) { $num = preg_replace('~[^\d+]~', '', $s); $num = preg_replace('~^00420~', '+420', $num); if (substr($num, 0, 4) !== '+420') { $num = '+420' . $num; } if (strlen($num) === 13) { echo $num . '<BR>'; } else { echo 'invalid number: ' . $num . '<BR>'; } } Výstup je +420123456789 +420605443322 +420000999888 invalid number: +420123254 invalid number: +420123254342334234343 +420605123123 invalid number: +420605123 +420605123456 +420123123123 |
||
martin6541 Profil |
anonym:
děkuji, ale tos nemusel. tohle sám nevyužiju. pro OPC využívám hotovou komponentu a neumím do toho vrtat. Ten pattern ještě zvládnu, to je jednoduché (když se mi podaří poskládat funkční). Asi skončím u toho, že zahrnu použití mezer neomezeně a víc musí stačit. Prozatím sem na půl cesty: ^\+420\s?[\d\s]{9,12}$ takto mi to vyhovuje víc... jen jestli by to nemělo jít nějak zjednodušit? ^\s?\+420\s?\d\s?\d\s?\d\s?\d\s?\d\s?\d\s?\d\s?\d\s?\d\s?|\s?00420\s?\d\s?\d\s?\d\s?\d\s?\d\s?\d\s?\d\s?\d\s?\d\s?$ Víc asi kupujícímu dovolit nemohu. |
||
_es Profil |
#9 · Zasláno: 19. 10. 2022, 13:21:28
Nie je nič lepšie, ako prísť o zákazníka len preto, že má problém zadať telefónne číslo a tešiť sa, že "ho to nepustilo".
Nechaj ho tam zadať čo chce a na serveri si to spracuj ako chceš ty. |
||
martin6541 Profil |
#10 · Zasláno: 19. 10. 2022, 13:51:11
_es:
Nemáš pravdu. Dopravce nepřevezme zásilku bez platného českého mobilního čísla. Dokud jsme to neměli alespoň takto ošefované, tak jsme museli každou druhou objednávku řešit přes emaily a dopisovat či opravovat číslo. A netěší nás ani jedna situace :) Myslím si, že chtít po zákazníkovi jednoduchou informaci není zase tolik... obzvlášť, když je to v jeho zájmu. A já hledám ten správný kompromis. |
||
anonym_ Profil * |
#11 · Zasláno: 19. 10. 2022, 14:32:06
martin6541:
V pohodě, mě to moc času nezabralo, a mělo by to plnit účel dostatečně tomu, co uživatelé mohou běžně zadat (mezery kdekoliv, pomlčky, závorky a oba druhy předvoleb). Pokud to (s učesáním) chceš použít, použij, pokud ne, tak ne. Jen jsem toho názoru, že uživatel by měl být schopný zadat cokoliv a ty s tím pak dál pracovat tak, jak potřebuješ. Myslím, že upravit to číslo do požadovaného formátu není tak náročné. Pokud ti stačí ten tvůj regulár a neodpustíš uživateli chybu (může tam být prázdný zkopírovaný znak nulové šířky, tedy neviditelný), tak použij ten :-) Nevím, jaká je s klientem smlouva, domluva, specifikace, tak těžko říct, jestli to stačí či nikoliv :-) Já mám zkušenost takovou, že labely nečtou a chyby dělají. |
||
martin6541 Profil |
#12 · Zasláno: 19. 10. 2022, 14:40:11
anonym:
Dobře... jak tedy doplním \d\s? o možnost zadat "prázdný zkopírovaný znak nulové šířky"
|
||
anonym_ Profil * |
#13 · Zasláno: 19. 10. 2022, 14:45:23
martin6541:
Spíše jsem tím chtěl naznačit, že zkopírovat může kdokoliv cokoliv a nemusí si toho všimnout. Těch možností, které tam můžou být a můžou být přehlédnuté je X, jedna nulová mezera ten problém nevyřeší (tu jsem uvedl jako příklad, protože není vůbec vidět). Ale jak jsem psal, pokud ti ten tvůj regex dostačuje, nech ho. Já bych to v zájmu klienta řešil více s ohledem na chybu zákazníka mého klienta, protože lidi chyby dělají (bývám u testování různých aplikací, tak vím, jak to v praxi bývá a co jsou schopni přehlédnout). |
||
_es Profil |
Prečo musí zadať číslo práve v tvare
+420... ?
Prečo nestačí v "lokálnom" tvare, fungujúcom v Česku? Čo ak má zákazník nemecké, slovenské, rakúske... číslo? |
||
anonym_ Profil * |
#15 · Zasláno: 19. 10. 2022, 14:56:53
_es:
„Čo ak má zákazník nemecké, slovenské, rakúske... číslo?“ Tady ti odpovím i já. Někteří dopravci neakceptují cizí čísla (a to nejen u nás, ale i v zahraničí si u některých kurýrů neobjednáš s CZ číslem). A proč +420? Zkus se někdy podívat do specifikace API jakéhokoliv dopravce, některé požadavky a formáty jsou tam pro 21. století naprosto nelogické. To, jestli to budu vyžadovat po zákazníkovi na webu, nebo to případně doplním já na serveru, je druhá věc. |
||
martin6541 Profil |
_es:
„Čo ak má zákazník nemecké, slovenské, rakúske... číslo?“ Tak to podle slov prodejce DPD neakceptuje a zásilku nepřevezme. :( anonym: „Zkus se někdy podívat do specifikace API jakéhokoliv dopravce“ podobné to bývá u dresy... číslo baráku chtějí mimo pole s návem ulice a podobně |
||
Keeehi Profil |
#17 · Zasláno: 19. 10. 2022, 16:28:18
martin6541:
„pro OPC využívám hotovou komponentu a neumím do toho vrtat.“ Ideálním řešením by bylo si sehnat někoho, kdo se v tom vrtat umí. Nicméně, když to neumíš upravit na serveru, šlo by to číslo upravit automaticky ještě v prohlížeči zákazníka. Vlastně něco jako napsal anonym ale v javascriptu. |
||
Časová prodleva: 2 roky
|
0