Autor | Zpráva | ||
---|---|---|---|
Evžen Profil * |
#1 · Zasláno: 7. 2. 2013, 13:21:46
Dobrý den, prosím o pomoc s formátování tel. čísel.
V databázi jsou čísla v různých tvarech, tak jak je uživatelé zadali. Tzn. např. 420/666123456, +420 666 123456, +420666123456, 666123456, 123 45 atd. Potřeboval bych poradit s regulárem, který by z proměnné vytáhl pouze číslice (a případně i počáteční "+") a znovu by číslo uložit to proměnné ve tvaru +420 721 123 456, případně jen 721 123 456, pokud předvolba chybí. Děkuji moc! |
||
Str4wberry Profil |
#2 · Zasláno: 7. 2. 2013, 13:53:17
Na stránku www.regularnivyrazy.info/telefonni-cislo.html jste se díval?
|
||
Evžen Profil * |
#3 · Zasláno: 7. 2. 2013, 14:29:15
Ano, ale nepodařilo se mi to rozchodit...
|
||
Str4wberry Profil |
#4 · Zasláno: 7. 2. 2013, 14:56:26
Aha. A k jakému kódu jste tedy dospěl a jaký máte problém?
|
||
Evžen Profil * |
#5 · Zasláno: 7. 2. 2013, 15:25:28
V podstatě jsem nedospěl k žádnému kódu, jen jsem zkoušel dát do preg_replace ten regulár, co je uvedený na té stránce.
Problém je, že nevím, jak to zkonstruovat. Můžete mi prosím napsat řešení? Tedy něco jako $telefon=preg_replace("...", "...", $telefon); .
Předpokládám, že je řešení bude úplně banální, ale asi jsem idiot, protože do regexp se mi nedaří proniknout... :) |
||
KubaFibi Profil |
#6 · Zasláno: 7. 2. 2013, 15:37:28
zkus toto:
$cislo = preg_replace("~^\+?(\d\d\d)?[ /]?(\d\d\d) ?(\d\d\d) ?(\d\d\d)$~", "\\1 \\2 \\3 \\4", $cislo); Možná by se dali ty \d\d\d nahradit za kratší \d{3}, jak je to napsané na té stránce, ale když jsem to vyzkoušel tak to nešlo. Myslím, že aby to fungovalo, tak by ty čísla v trojici musela být stejná. Možná se pletu. Jinak ten regulár co jsem vložil mi funguje na všechny formáty z tohoto pole: Array("+420123456789", "420123456789", "420/666123456", "+420/666123456", "+420 123 456 789", "420 123 456 789", "123456789", "123 456 789"); Výsledek je pak ve formátu xxx xxx xxx nebo xxx xxx xxx xxx - bez plusu
|
||
Evžen Profil * |
#7 · Zasláno: 7. 2. 2013, 17:00:37
Super, tohle funguje. Akorát ten plus mi to tam převádí taky - ty píšeš, že u tebe je výsledek bez plusu, to je divné...
|
||
KubaFibi Profil |
To je opravdu divné, zkusil jsem to znovu, abych se ujistil a plus u žádného z těch čísel nemám.
Nemohlo se stát, že si při kopírování něco třeba omylem umázl? Ono tam stačí např. přesunout jednu závorku a už by to tomu odvovídalo. Viz. dále: $cislo = preg_replace("~^\+?(\d\d\d)?[ /]?(\d\d\d) ?(\d\d\d) ?(\d\d\d)$~", "\\1 \\2 \\3 \\4", $cislo); $cislo = preg_replace("~^(\+?\d\d\d)?[ /]?(\d\d\d) ?(\d\d\d) ?(\d\d\d)$~", "\\1 \\2 \\3 \\4", $cislo); Jinak mě opravdu nenapadá, jak je možné, že tam to + zůstane. ################################################ EDIT: Ještě mě napadlo, jestli některá čísla nemáte ve formátu + xxx xxx xxx xxx (mám na mysli tu mezeru mezi + a předvolbou). Kdyby jste takové číslo měl, tak tam plus zůstane, ovšem to číslo by ani nemělo projít funkcí preg_replace(). Kdyby to číslo bylo např. + 420 123 456 789, tak by se asi nedalo poznat, že to funkcí neprošlo. Pokud by tedy byla taková čísla, jak jsem psal - "s mezerou", stačí upravit regexp následovně: $cislo = preg_replace("~^\+? ?(\d\d\d)?[ /]?(\d\d\d) ?(\d\d\d) ?(\d\d\d)$~", "\\1 \\2 \\3 \\4", $cislo); |
||
Evžen Profil * |
#9 · Zasláno: 8. 2. 2013, 09:55:43
Mám to opravdu přesně tak, jak jsi mi to uvedl... a opravdu to funguje tak, jako by byl použit ten druhý řádek -
$cislo = preg_replace("~^(\+?\d\d\d)?[ /]?(\d\d\d) ?(\d\d\d) ?(\d\d\d)$~", "\\1 \\2 \\3 \\4", $cislo); . Zvláštní...
Ale to nevadí, ono je to tak i možná lepší :). Díky moc! |
||
KubaFibi Profil |
#10 · Zasláno: 8. 2. 2013, 12:48:10
Možná je to jiným nastavením php.ini (jediné co mě napadlo), ale v tom už se moc nevyznám, tak nevím. Nicméně jsem rád, že jsem pomohl.
|
||
Časová prodleva: 11 let
|
0