Chiquvchi qo'ng'iroqlar
Foydalanuvchilar uchun chiquvchi qo'ng'iroqlarni yo'naltirish qoidalarini sozlash
Bu nima?
Chiquvchi qo'ng'iroq qoidalari — tizim foydalanuvchilari chiquvchi qo'ng'iroq qilganda, qaysi yo'nalish (trunk) orqali va qanday raqam formatida chiqishini boshqarish uchun ishlatiladi.
Qisqacha: "Qaysi foydalanuvchi, qaysi raqamga qo'ng'iroq qilsa — qaysi chiquvchi yo'nalishdan chiqsin va raqam qanday formatda yuborisin."
Bu nima uchun kerak?
Turli vaziyatlarda chiquvchi qo'ng'iroqlarni alohida yo'naltirishga ehtiyoj tug'iladi:
- Shahar raqamlariga bir trunk, mobil raqamlarga boshqa trunk orqali chiqish
- Xorijiy raqamlarga faqat ma'lum foydalanuvchilar qo'ng'iroq qila olishi
- Raqamni trunk talab qiladigan formatga keltirish (trunklar odatda 9 xonali raqamni qabul qiladi, masalan:
0901234567→ trunkka901234567) - Bir nechta trunk mavjud bo'lganda yukni teng taqsimlash (random tanlash)
Maydonlar
Shahar raqamlari, Mobil — Beeline trunk, Xorijiy chiquvchi / belgilari ichida yoziladi. Masalan: /^998\d{9}$/ $1, $2 — pattern guruhlariga ishora. Standart qiymat: $1 (raqam o'zgarishsiz yuboriladi). call_history jadvalida ko'rinadi. $1, $2 — pattern guruhlariga ishora. Standart qiymat: $1 (raqam o'zgarishsiz yoziladi). Nima uchun ikkita almashtirish? Trunklar odatda 9 xonali raqamni qabul qiladi (masalan, 901234567) — chunki davlat kodi (998) va prefiks trunkning o'zida sozlangan. Statistikada esa raqam to'liq xalqaro formatda (998901234567) ko'rinishi qulayroq. Ikki alohida maydon shu farqni qo'llab-quvvatlaydi. Agar bir xil format kerak bo'lsa — ikkala maydonga bir xil qiymat yozing.
Qanday ishlaydi?
Qoidalar tartib raqami bo'yicha birma-bir tekshiriladi. Birinchi mos kelgan qoida ishga tushadi va qolgan qoidalar tekshirilmaydi.
Hech bir qoida mos kelmasa — qo'ng'iroq to'xtatiladi. Foydalanuvchi uchun tegishli qoida bo'lishi shart.
Nima uchun ^, $ va () kerak?
Bu — eng ko'p xato qilinadigan joy. Quyida aniq misollar bilan tushuntirilgan.
^ va $ — chegara belgilari
^ va $ belgilarsiz pattern raqamning istalgan joyida mos kelishi mumkin.
Misol: /998\d{9}/ — anchorsiz pattern
| Kirish raqam | Mos keladimi? | Nima uchun? |
|---|---|---|
998901234567 | ✓ | To'g'ri |
998901234567qo'shimcha | ✓ ← xato! | Oxiridagi belgilar e'tiborga olinmaydi |
prefix998901234567 | ✓ ← xato! | Oldingi belgilar e'tiborga olinmaydi |
998901234567890 | ✓ ← xato! | 15 xonali raqam ham mos keladi |
Misol: /^998\d{9}$/ — to'g'ri, ^ va $ bilan
| Kirish raqam | Mos keladimi? | Nima uchun? |
|---|---|---|
998901234567 | ✓ | To'g'ri — aniq 12 ta belgi |
998901234567qo'shimcha | ✗ | $ oxirni tekshiradi |
prefix998901234567 | ✗ | ^ boshni tekshiradi |
998901234567890 | ✗ | 12 ta belgidan ortiq — mos kelmaydi |
Telefon raqamlarida ^ va $ doim ishlatish shart. Anchorsiz pattern kutilmagan raqamlarga ham mos kelishi mumkin.
() — almashtirish uchun guruh
Agar raqamni qayta yozmoqchi ($1, 998$1 va h.k.) bo'lsangiz, pattern'da guruh () bo'lishi shart. Bir xil pattern guruhlari ikkala almashtirishda (rewrite_trunk va rewrite_cdr) bir xilda ishlaydi. Aks holda $1 bo'sh bo'ladi.
Misol: kiritilgan 0901234567 — trunkka 9 xonalik (901234567), tarixga to'liq (998901234567)
Almashtirish kerak bo'lmasa (raqam o'zgarishsiz ketsa), guruh shart emas — almashtirish maydonlarini $1 qilib qoldiring.
Regex va almashtirish qoidalari
Pattern har doim / belgilari ichida yoziladi: /pattern/
| Belgi | Nima qiladi | Misol pattern | Nima mos keladi |
|---|---|---|---|
^ | Satr boshidan boshlanishi | /^998/ | 998901234567 — ha |
$ | Satr oxiri bilan tugashi | /\d{9}$/ | 9 raqam bilan tugaydi |
^ + $ | Aniq shu format (boshqa belgi yo'q) | /^\d{12}$/ | Faqat 12 xonali raqam |
\d | Istalgan bitta raqam (0–9) | /\d/ | 0, 5, 9 |
\d{n} | Aniq n ta raqam | /\d{9}/ | 9 xonali istalgan raqam |
() | Guruh — almashtirish'da $1, $2 sifatida olinadi | /^0(\d+)$/ | 0901... → guruh 901... |
? | Oldingi belgi bo'lishi ham, bo'lmasligi ham mumkin | /^\+?998/ | +998... ham, 998... ham |
(a|b) | a yoki b | /(90|91)\d{7}/ | 90 yoki 91 bilan boshlanadi |
.+ | Istalgan raqam (kamida 1 belgi) | /^(.+)$/ | Barcha raqamlar — catch-all sifatida ishlatish tavsiya etiladi |
.* | Istalgan raqam (bo'sh satr ham mos keladi) | /.*/ | Barcha raqamlar — ⚠️ almashtirishda ikki marta match berishi mumkin |
Almashtirish (rewrite) belgilari
Quyidagi belgilar rewrite_trunk va rewrite_cdr maydonlariga bir xil tarzda qo'llaniladi.
| Belgi | Nima | Misol |
|---|---|---|
$1 | Patternning 1-guruhi (...) | /^0(\d+)$/ → 998$1 |
$2 | Patternning 2-guruhi | /^(\d{3})(\d+)$/ → $1-$2 |
$1 | Guruh bo'lmasa — raqam o'zgarishsiz | /^998\d{9}$/ → $1 |
Raqamni o'zgartirmasdan yuborish uchun almashtirish maydoniga $1 yozing yoki bo'sh qoldiring. Buni har bir maydon (trunk va CDR) uchun alohida boshqarish mumkin.
Misollar
Trunk 9 xonali raqamni qabul qiladi degan taxminda — pattern'ga 9 xonali qismni guruhga oladi ((...)), so'ng rewrite_trunk = $1 (trunkka 9 xonalik chiqadi), rewrite_cdr = 998$1 (tarixga to'liq xalqaro format yoziladi).
Catch-all pattern: barcha raqamlarni ushlab qolish uchun /^(.+)$/ dan foydalaning. /.*/ dan farqli ravishda bo'sh satrni ikkinchi marta match qilmaydi — almashtirish to'g'ri ishlaydi.
| Vaziyat | Foydalanuvchilar | Regex pattern | Trunk uchun | CDR uchun | Chiquvchi yo'nalishlar |
|---|---|---|---|---|---|
Local format (0XXX…) — trunkka 9 xonalik | Barchasi | /^0(\d{9})$/ | $1 | 998$1 | [ucell-trunk, beeline-trunk] |
Xalqaro format (998XXX…) — trunkka 9 xonalik | Barchasi | /^998(\d{9})$/ | $1 | 998$1 | [mobile-trunk] |
+998… ham, 998… ham qo'llab-quvvatlanadi | Barchasi | /^\+?998(\d{9})$/ | $1 | 998$1 | [mobile-trunk] |
Beeline mobil (90, 91) — alohida trunk | [101, 102] | /^998(9[01]\d{7})$/ | $1 | 998$1 | [beeline-trunk] |
Shahar raqamlari (71) — IP-telefoniya trunk | Barchasi | /^998(71\d{7})$/ | $1 | 998$1 | [city-trunk] |
Xorijiy chiquvchi — trunkka 00 prefiks | [201, 202] | /^(?:00|\+)?(\d{6,})$/ | 00$1 | $1 | [international-trunk] |
| Yukni teng taqsimlash, hech narsani o'zgartirmaslik | Barchasi | /^(.+)$/ | $1 | $1 | [trunk-1, trunk-2, trunk-3] |
Eslatmalar
- Qoidalar tartib raqami bo'yicha tekshiriladi — aniqroq qoidalarni kichikroq tartib raqami bilan joylashtiring (masalan: aniq raqam → tartib 1, umumiy qoida → tartib 10).
- Foydalanuvchi bir nechta qoidaning
Foydalanuvchilarro'yxatida bo'lishi mumkin — faqat birinchi mos kelgani ishlatiladi. Chiquvchi yo'nalishlarda bir nechta trunk ko'rsatilsa, har bir qo'ng'iroqda tasodifiy biri tanlanadi — bu yukni teng taqsimlash imkonini beradi.- Barcha qoidalar bitta so'rovda saqlanadi (massiv sifatida). Saqlashda eski barcha qoidalar o'chiriladi va yangilari yoziladi.
- Qoidalar ro'yxati bo'sh yuborilsa — barcha qoidalar o'chib, chiquvchi qo'ng'iroqlar to'xtatiladi.
Regexlarni sinash
regex101.com — Regex patternlarini onlayn sinash uchun. PHP rejimini tanlang va "Substitution" bo'limida almashtirish natijasini ham sinab ko'ring.