| Autor | Zpráva | ||
|---|---|---|---|
| majo80 Profil * |
#1 · Zasláno: 14. 10. 2010, 23:01:27
Mám telefónne čísla v tvare 0903000000,0948000000,0905000000 a chcel by som ich prerobiť na tvar 421903000000,421948000000,421905000000 t.j. zameniť prvú nulu u každého čísla za 421.
|
||
| Keeehi Profil |
#2 · Zasláno: 14. 10. 2010, 23:15:27
"421".substr($cislo,1); |
||
| majo80 Profil * |
#3 · Zasláno: 14. 10. 2010, 23:19:42
Keeehi:
to zmení iba prvú nulu. Ja potrebujem zmeniť každú začiatočnú nulu každého čísla. Skrátka z tuzemského čísla 0907 urobiť medzinárodné 421907. |
||
| Majkl578 Profil |
#4 · Zasláno: 14. 10. 2010, 23:29:26 · Upravil/a: Majkl578
Regulárem?
echo preg_replace('~(?<=^|,)0(\d+)~', '421\\1', '0903000000,0948000000,0905000000');
//421903000000,421948000000,421905000000 |
||
| Keeehi Profil |
#5 · Zasláno: 14. 10. 2010, 23:34:31
majo80:
Nenapadlo mě, že ty čísla máte v řeťezci. Očekával jsem je uložená v poli. |
||
| majo80 Profil * |
#6 · Zasláno: 14. 10. 2010, 23:41:15
Majkl578:
ďakujem, presne to som potreboval. Keeehi moja chyba, nepresne som to napísal |
||
| majo80 Profil * |
#7 · Zasláno: 15. 10. 2010, 09:42:33
ešte by som potreboval jednu vec. Overiť, či je text s číslami v správnom tvare, t.j. spĺňa tieto podmienky:
1) každé číslo začína na 09..... 2) dĺžka každého čísla je presne 10 znakov 3) minimálny počet čísel je 2 4) maximálny počet čísel je 100 Pravdepodobne je to nemožné, ale veľmi by ste mi pomohli. |
||
| Majkl578 Profil |
#8 · Zasláno: 15. 10. 2010, 10:02:00
Šlo by to, hned několika způsoby:
a) ponechat regulár, počet kontrolovat po provedení: $phones = '0903000000,0948000000,0905000000';
$phones = preg_replace('~(?<=^|,)0(9\d{8})~', '421\\1', $phones, -1, $count);
if ($count < 2 || $count > 100) {
throw new Exception('Bylo zadáno ' . ($count < 2 ? 'méně' : 'více') . '(' . $count . ') než je povoleno.');
}b) použít regulár na ověření a další na nahrazení c) nepoužít regulár a udělat něco ošklivého |
||
| majo80 Profil * |
#9 · Zasláno: 15. 10. 2010, 10:33:53
Funguje to perfektne ale nekontroluje to jednu podmienku a to dĺžku každého čísla - musí byť presne 10 znakov.
|
||
| Keeehi Profil |
#10 · Zasláno: 15. 10. 2010, 13:17:29
majo80:
Pokud jsi použil kód z [#8], tak to délku kontroluje. Pokud té délce neodpovídá, tak se to číslo nepřevede. |
||
| majo80 Profil * |
#11 · Zasláno: 15. 10. 2010, 18:26:04
Keeehi:
Áno použil som ten kód, ale to overí či v $phones je viac ako 1 a menej ako 100 tel. čísel. Nie či každé z nich má dĺžku 10 znakov. |
||
| Keeehi Profil |
#12 · Zasláno: 15. 10. 2010, 18:33:14
majo80:
„Nie či každé z nich má dĺžku 10 znakov“ S tím si dovolím nesouhlasit. 0(9\d{8})0 - první čislo je nula - 1 číslice
9 - druhé číslo je devět - 1 číslice
\d{8} - právě 8 jakýchkoliv číslic - 8 číslic
-----------
10 číslic |
||
| nightfish Profil |
#13 · Zasláno: 15. 10. 2010, 23:13:53
Jsem sám, komu by jako vhodné řešení připadlo převést na pole a pracovat s tím jako s polem (místo onanie s RV)?
|
||
| Keeehi Profil |
#14 · Zasláno: 16. 10. 2010, 00:13:23
nightfish:
Taky mě to napadlo, ale explode, nahrazení a implode bylo vždy minimálně 3x pomalejší a to tam ještě chyběla ta požadovaná kontrola na délku čísla. (vlastně jakákoliv kontrola tam chyběla) |
||
|
Časová prodleva: 16 let
|
|||
0