GH GambleHub

Kirish va UX shakl niqoblari

1) Qonunning

1. Yordam berish, jazolamaslik. Maska kiritishni boshqaradi va xatolarni kamaytiradi, lekin bosib chiqarish va qoʻyishni bloklamaydi.
2. Maʼlumotlar ≠ koʻrsatiladi. Biz «xom» me’yorlashtirilgan qiymatlarni saqlaymiz, faqat UI formatida.
3. Bashorat qilinadigan kursor. Har qanday avtomatik almashtirish caret «sakramaydi» va undo/redo buzilmaydi.
4. Lokal va qurilma. Klaviaturalar, ajratgichlar, taqvim va valyutalar - mintaqa va platforma bo’yicha.
5. Foydalanish imkoniyati va maxfiyligi. Matn + ikonka/rang; sezgir maydonlarni yashiramiz, lekin parol/avtomatik toʻldirish menejerlariga xalaqit bermaymiz.

2) Niqob o’rinli bo’lsa (va bo’lmasa)

Foydalanish:
  • Tuzilishi barqaror formatlar: telefon, IBAN, PAN (xaritalar), CVC, sana, vaqt, indeks, OTP.
  • Bo’lingan pul summalari (bosilganda - «sof» kirish, blyurada - format).
  • Kodlar (ref. kodlar, promo), belgilangan uzunliklar.
Quyidagilardan qochish:
  • Nomlar/manzillar/Email (maska ruxsat etilgan belgilarni/tillarni cheklaydi).
  • Murakkab bo’sh maydonlar (sharhlar, kompaniya nomlari).
  • Potentsial nomaʼlum formatdagi kirish (mamlakatsiz xalqaro raqamlar).

3) Niqob vs avtoformat vs validatsiya

Niqob - «uchish» tuzilmasi (qavslar, defislar); kirish/qoʻyishni buzmasligi kerak.
Avtoformat - fokusni blyur/yo’qotishda qo’llaymiz (minglab, IBAN bo’shliqlari).
Validatsiya - to’g "rilik mantig’i (uzunligi, nazorat summasi), xatolarni" blur "yoki" submit "dan keyin ko’rsatish.

Qoida: niqob validatsiyani almashtirmaydi va avtoformat kiritilganning maʼnosini oʻzgartirmasligi kerak.

4) Klaviatura va HTML atributlari

Xatolarni tezlashtirish va kamaytirish uchun toʻgʻri turlarni/rejimlarni tanlang:
Maydon`type``inputmode``autocomplete`Izoh
Telefon`tel``tel``tel`Mobil telefonda raqamli klaviatura koʻrsatilmoqda
Email`email``email``email`Brauzer formatini tasdiqlash
Summa`text``decimal``off`Lokal ajratuvchilar; Sonni «sent» da saqlash
Sana`date`/`text``numeric``bday`/`cc-exp`Joylagan joydagi nativ pikerlar
PAN xaritasi`text``numeric``cc-number`Tokenizatsiya; Manzilni bloklash
Egasining nomi`text``latin`/`text``cc-name`Ish stolida avtokapssiz
IBAN`text``latin`/`text``off`Uppercase, boʻshliqsiz
OTP (6 raqam)`text``numeric``one-time-code`iOS/Android’da SMSni avtomatik toʻldirish

5) Karet, kopipast va normallashtirish

Caretni buzmang: Belgilarni (boʻshliqlar/qavslar) avto qoʻyishda kursorning oʻrnini oʻzgartiring.
Kopipast: qoʻyishda boʻshliqlar/tirnoqlardan tozalang → validatsiya → formatlash bilan koʻrsating.
Normallashtirish: trimming, «egri» belgilarni almashtirish (’O’→’0’mumkin emas!), IBAN uchun yuqori registrga tarjima qilish, ombordagi yagona sana formati (ISO).

PAN/IBAN normallashtirish misoli:
js const clean = s => s. replace(/[^\da-zA-Z]/g,'');
const normalizePAN = s => clean(s). slice (0.19) ;//no spaces/hyphens const normalizeIBAN = s => clean (s). toUpperCase();   // A–Z0–9

6) Raqamlar, valyutalar va lokallar

«Qanday bosiladi» (ruxsatnoma’,’yoki’.’ajratuvchi sifatida), minor units (tiyin/sent) da saqlash.
Sabmitdan so’ng/blyurda lokal ko’rsatish (minglarni guruhlash); fokusda tahrirlash qulayligi uchun «xom» qiymatni koʻrsating.
Valyutani aniq ko’rsating va aniqlikni belgilang (masalan, 2 ta belgi).

js function parseMoney(input) {
//resolve both comma and period as decimal const s = input. replace(/\s/g,''). replace(',', '.');
const num = Number(s);
if (Number. isNaN(num)) return null;
return Math. round(num 100); // cents
}

function formatMoney(cents, locale='ru-RU', currency='RUB') {
return (cents/100). toLocaleString(locale, { style:'currency', currency });
}

7) Sanalar va vaqt

Agar mahalliy pikerlar noqulay/turli platformalarda boʻlsa,’DD niqobli matn maydonidan foydalaning. MM. YYYY’, lekin ISO’YYYY-MM-DD’saqlang.
Haqiqatni tekshirish (29. 02, diapazonlar), taymzonlar - serverda.
«Bugun», «Hozir», «Tozalash» tugmalarini qoʻshing.

8) Telefonlar va mamlakatlar

Ikkita maydon: mamlakat (+ kod) va raqam yoki tanlangan mamlakat boʻyicha «aqlli» niqob.
Toʻliq’+ CC...’qoʻyilganda mamlakatni avtomatik toʻldiring.
E.164 saqlang (’+ CCXXXXXXXX’).

9) To’lov rekvizitlari: PAN/IBAN/CVC/EXP

PAN: 4-4-4-4/4 turkumi; ma’noda - faqat raqamlar; Luhn-check; PAN bilan hech qanday loglar/tahlillar mavjud emas.
CVC:’password’-stil (yashirin),’autocomplete =’cc-csc’’, loyihaga saqlanmaydi.
EXP:’MM/YY’, avto-qo’shimchalar ’/’ 2 raqamdan keyin, 01-12 oralig’ini va oqilona yilni tekshirish.
IBAN: upper-case, faqatgina UI bo’shliqlar; mamlakat bo’yicha uzunligini va nazorat summasini tekshirish.

10) OTR/tasdiqlash kodi

Avtofokus va avto oʻtish bilan 6 (yoki N) katak, buferdan qoʻyish butun kodni taniydi.
’ autocomplete =» one-time-code»’, mobil telefonda - SMSdan avtomatik davolash.
Split maydonlarsiz bekap-kirish (bitta maydon) - skrinriderlar uchun.

html
<div class="otp" role="group" aria-label="Код из SMS">
<input inputmode="numeric" maxlength="1">
<input inputmode="numeric" maxlength="1">
<!-- … -->
</div>

11) Niqoblar va a11y

Yorliq majburiy (’<label for>’), placeholder - oʻrindiq emas.
Qoidani yonma-yon tushuntiring: helper text («Format: + CC XXX XXX-XX-XX»).
Xatolarni’aria-describedby’, tanqidiy’role =’alert’orqali bogʻlang.
Matn va kontur kontrasti ≥ AA,’: focus-visible’ni yashirib boʻlmaydi.

12) Maxfiylik va xavfsizlik

Sezgir maydonlar: manzilga yozmaslik, RUMga yozmaslik, loyihalarga (PAN, CVC, pasport) saqlamaslik.
Niqoblar va formatlash hisobning haqiqiyligini oshkor qilmasligi kerak («Agar email roʻyxatdan oʻtgan boʻlsa...» - neytral formulasi).
Tanqidiy submitlar uchun idempotentlik va retry (to’lov/stavka).

13) Shakllarning xatti-harakati va unumdorligi

Asinxron tekshirishlar debaunsi (250-400 ms), ko’rinadigan indikatsiya «Tekshiramiz»....
Bitta maydon uchun butun ekranni bloklamang; lokal spinner/skelet.
DOM o’zgarishlarini qabul qiling; faqat’transform/opacity’ni jonlantiring.
Mobil telefonda klaviatura (safe-area, viewport meta) paydo boʻlganda «sakrash» dan qoching.

14) Snippet-kod

Yumshoq telefon maskasi (ilova boʻlmasdan):
js function formatPhoneVisible(value) {
const d = value. replace(/\D/g,''). slice(0,15);
if (!d) return '';
if (d. startsWith('7')          d. startsWith('8')) {
return d. replace(/^([78])? (\d{3})(\d{3})(\d{2})(\d{2})./, '+7 ($2) $3-$4-$5');
}
// generic E.164 grouping: +CC XXX XXX XX XX return d. replace(/^(\d{1,3})(\d{0,3})(\d{0,3})(\d{0,2})(\d{0,2})./, (m,c1,c2,c3,c4,c5)=>
`+${c1}${c2?` ${c2}`:''}${c3?` ${c3}`:''}${c4?` ${c4}`:''}${c5?` ${c5}`:''}`.trim());
}

const input = document. querySelector('#phone');
input. addEventListener('input', e => {
const raw = e. target. value;
const pos = e. target. selectionStart;
const digitsBefore = raw. slice(0,pos). replace(/\D/g,''). length;
const cleaned = raw. replace(/[^\d+]/g,'');
const visible = formatPhoneVisible(cleaned);
e. target. value = visible;
// restore caret by counting digits let p = 0, count = 0;
while (p < e. target. value. length && count < digitsBefore) { if (/\d/.test(e. target. value[p])) count++; p++; }
e. target. setSelectionRange(p, p);
});
Yig’indisi: «fokusdagi xom → blyurdagi format»:
js const amount = document. getElementById('amount');
let cents = null;

amount. addEventListener('focus', () => {
if (cents!=null) amount. value = String(cents/100). replace('.', ',');
});
amount. addEventListener('blur', () => {
const v = parseMoney(amount. value) ;//from section 6 if (v = = null) return; cents = v;
amount. value = formatMoney(cents, 'ru-RU', 'RUB');
});
IBAN: upper-case va blur bilan guruhlash:
js const iban = document. getElementById('iban');
iban. addEventListener('input', () => iban. value = iban. value. toUpperCase());
iban. addEventListener('blur', () => {
const raw = normalizeIBAN(iban. value);
iban. dataset. raw = raw ;//for iban submission. value = raw. replace(/(.{4})/g,'$1 '). trim () ;//view only
});

15) Dizayn-tizim tokenlari (misol)

json
{
"input": {
"radius": 10,
"height": { "sm": 36, "md": 40, "lg": 48 },
"gap": 8,
"icon": 16
},
"mask": {
"debounceMs": 300,
"otpLength": 6,
"moneyPrecision": 2,
"phoneMaxDigits": 15
},
"a11y": {
"focusRing": { "width": 2, "offset": 2 },
"contrastAA": true
}
}
CSS-presetlar:
css
.input { height:40px; padding:0 12px; border-radius:10px; }
.input:focus-visible { outline:2px solid var(--focus-ring); outline-offset:2px; }
.field-error { color: var(--role-danger); font-size:.875rem; margin-top:6px; }
.otp input { width:40px; text-align:center; }

16) iGaming xususiyatlari

To’lovlar/xulosalar: yumshoq niqobli PAN/IBAN/amount; qattiq idempotentlik va sezgir maydonlarning log’lari yo’qligi; komissiyalar va muddatlar to’g "risidagi maslahatlar.
KYC: sana, pasport raqamlari uchun niqoblar («qattiq» filtrlashsiz - turli formatdagi hisoblar), faylning o’lchami/turi, oldindan ko’rish.
Limitlar va mas’uliyatli o’yin: tushunarli summalar/davrlar (kunlar/haftalar/oylar), xelperlar yonma-yon, kontrast AAA.
Stavkalar: summani tezda kiritish (preseta-tugmalar + maydon), fokusda «xom» son, blur bo’lganda lokal formati; «, «...../qoʻshaloq ajratuvchiga ruxsat berilmagan.

17) Anti-patternlar

Ruxsat etilgan belgilar/qoʻyishni taqiqlovchi qattiq niqoblar.
Avtoformatda sakraydigan caret; tanlash/undo yo’qolishi.
Yorliq oʻrniga Placeholder.
Qiymatning ichiga valyutani avtomatik qoʻshish (kopipastni buzadi).
Har bir belgi uchun debaunsiz xatolar.
Ombordagi mustaqil formatlar (ISO/sonlarni saqlang).
PAN/pasport raqamlarini loglash va rad etishning «juda halol» sabablarini koʻrsatish.

18) Metrika va eksperimentlar

Error rate (maskadan oldin/keyin).
Time-to-Complete shakllari va qayta jo’natish.
Muvaffaqiyatsiz qo’shimchalar (kopipast) va «qaytarmalar» (undo) ulushi.
CTR maslahatlar/misollar, avto toʻldirishlar ulushi.
Abandon rate to’lov/KS bosqichida.

19) QA-chek-varaq

Introduction & caret

  • Buferdan qoʻyish buzilmaydi, boʻshliqlar/defislar toʻgʻri tozalanadi.
  • Caret avtoformatdan keyin oldindan aytib bo’lmaydi.

Lokal va format

  • Summalar’, ’/’.’; minor units da saqlash.
  • Sanalar parchit va validatsiya qilinadi; ISOda saqlash.

A11y

  • Yorliqlar va’aria-describedby’ulangan;’role =’alert’tanqidiy uchun.
  • Kontrast va fokus halqa AA ga mos keladi.

Xavfsizlik

  • Sezgir maydonlar kodlanmaydi/keshlanmaydi.
  • Idempotentlik va retry tanqidiy qadamlarda.

UX

  • Placeholder - misol, yorliq emas; helper yaqin.
  • Niqoblar mobil telefonda chop etilishiga xalaqit bermaydi; toʻgʻri klaviatura (’inputmode’).

20) Dizayn-tizimdagi hujjatlar

Компоненты: `MaskedInput`, `MoneyInput`, `PhoneInput`, `OtpInput`, `IbanInput`.
Niqob tokenlari (uzunlik/shablon), caret/qo’shimchalar qoidalari, sonlar/sanalar lokalizatsiyasi.
Gaidlarni maxfiylik bo’yicha (nimani izohlamaslik kerak), foydalanish imkoniyati va avtoformat bo’yicha vs blyur.

«Do/Don’t» haqiqiy misollar va ko’rsatkichlar bilan

Qisqacha xulosa

Niqoblar va shakllar kiritishni tezlashtirganda yaxshi bo’ladi, ma’lumotlarni toza saqlaydi va ularga xalaqit bermaydi. Ehtiyotkorlik bilan formatlang, kiraverishda normallashtiring, barqaror shakllarda saqlang, lokalizatsiyalar va mavjudlikni hisobga oling. Shunda shakllar tez va tushunarli bo’ladi - ayniqsa, to’lovlar, KYC va stavkalarning sezgir stsenariylarida.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.