ucell

package module
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 23, 2024 License: MIT Imports: 6 Imported by: 0

README

Izoh

UCELL kompaniyasi servis SMS shablonlarini tekshirish kutubxonasi

UCELL qanday tekshiradi
  • %d - bitta son
  • %d+ - ketma-ket kelgan sonlar
  • %d{1,n} - ketma-ket n ta sonlar (kamida 1 ta)
  • %w - son va harfdan iborat so'z
  • %w+ - ketma-ket kelgan son va harflardan iborat so'zlar
  • %w{1,n} - ketma-ket n ta son va harflardan iborat so'zlar (kamida 1 ta)
Muammolar

UCELL da shablon yaratguncha %d, %d+, %d{1,n}, %w, %w+, %w{1,n} lar atrofida prefix va suffix kelishi mumkin. Ya'ni:

prefix%dsuffix yoki prefix%w{1,n}suffix

Agar prefix va suffix %d, %w bilan birga kelga, tekshirilayotgan matnda ham prefix va suffix yopishib kelishi shart. Masalan: salom%ddunyo => salom123dunyo

Agar prefix va suffix %d+, %w+ bilan birga kelsa, prefix birinchi son/so'zda, suffix esa oxirgi son/so'zda bo'lishi lozim. Agar son/so'z bitta bo'lsa prefix va suffix yopishib keladi. Masalan: salom%d+dunyo => salom123 456 789dunyo, salom123dunyo

Agar prefix va suffix %d{1,n}, %w{1,n} bilan birgalikda kelsa, prefix birinchi son/so'zga yopishib, suffix esa oxirgi son/so'zdan bo'shliq bilan ajratilgan holda kelishi kerak. Masalan: salom%d{1,3}dunyo => salom123 456 789 dunyo, salom123 dunyo

Dasturdan foydalanish

O'rnatish

go get github.com/shranet/ucell

Foydalanish


// Dastlab ucellTemplate obyekt yaratiladi
ut := NewUcellTemplate()

ut.Add("%d")
ut.Add("salom %w")

// Barcha mavjud shablonlar qo'shiladi
// for _, tpl := range templates {
// 	ut.Add(tpl)
// }

// Matnlarni tekshirish
log.Println(ut.IsMatch("123"))
log.Println(ut.IsMatch("salom dunyo"))
Qo'shimcha ma'lumot

Dastur har bir qo'shilgan shablondan prefix va suffix larni hisobga olgan holda BTREE yaratadi. Tekshirish jarayonida esa shu BTREE dan foydalanadi. Agar shablonlarda prefix va suffix ishlatilmasa kod ancha tez ishlaydi. Qancha ko'p prefix/suffix ishlatilsa, kod shuncha sekinlashadi.

$${\color{red} Muhim}$$

UCELL tomonidan berilgan xujjatlarda %d va %w da har xil belgilar aralashib kelishi mumkin deyilgan. Lekin tekshiruvlar natijasida esa a-z (lotin harflari), а-я (krill harflari), raqamlar va bo'shliqdan tashqari barcha belgilar tozalanishi aniqlandi. \n va \r lar esa bo'shliq bilan almashtiriladi.

Agar ushbu qoida noto'g'ri bo'lsa, uni to'g'irlash shart. Chunki ushbu kutubxona a-zа-я0-9 dan tashqari barcha belgilarni tozalab keyin shablonga mosligini tekshiradi.

Test va Benchmark
% go test -bench=. -v

2024/05/16 00:29:35 Fayllarni o'qish
2024/05/16 00:29:35 Fayllarni tahlil qilish va kerakli obyektlarni yaratish
2024/05/16 00:29:36 Barcha shablonlar uchun bitta UcellTemplate yaratish
2024/05/16 00:29:36 Test boshlandi
=== RUN   TestDonalab
--- PASS: TestDonalab (0.06s)
=== RUN   TestHarBirTur
--- PASS: TestHarBirTur (0.33s)
=== RUN   TestAll
--- PASS: TestAll (0.08s)
=== RUN   TestRegex
--- PASS: TestRegex (0.02s)
goos: darwin
goarch: arm64
pkg: github.com/shranet/ucell-tpl-match
BenchmarkAll
BenchmarkAll-10                    71127             16489 ns/op
BenchmarkAllRegex
BenchmarkAllRegex-10                2924            400121 ns/op
BenchmarkUcellTemplate
BenchmarkUcellTemplate-10          85605             13243 ns/op
BenchmarkRegexp
BenchmarkRegexp-10                233331              4879 ns/op
PASS
ok      github.com/shranet/ucell-tpl-match      6.915s

Natijalar:

BenchmarkAll BenchmarkAllRegex BenchmarkUcellTemplate BenchmarkRegexp
16489 ns/op 400121 ns/op 13243 ns/op 4879 ns/op
60 646 ta/sekund 2 499 ta/sekund 75 512 ta/sekund 204 960 ta/sekund

Ushbu kutubxona har doim regexlar ro'yxatini shakillantirib, har gal uni for/loop yordamida tekshirgandan ancha tez bo'ladi.

Lekin donalab tekshirishga kelganda regex ancha ustunlikka ega.

Xulosa

Agar siz bitta SMS ni N ta shablondan birortasiga mosligini tekshirmoqchi bo'lsangiz, ushbu kutubxonadan foydalaning. Agar siz SMS ni ma'lum 10-100 tagacha shablonga mosligini tekshirmoqchi bo'lsangiz regex ro'yxatdan foydalanganingiz ma'qul.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CleanMessage added in v1.0.1

func CleanMessage(message string) string

func CleanTemplate added in v1.0.1

func CleanTemplate(tpl string) string

func CreateRegexp

func CreateRegexp(tpl string) *regexp.Regexp

func IsMatch

func IsMatch(r *regexp.Regexp, message string) bool

Types

type UcellTemplate

type UcellTemplate interface {
	Add(tpl string)
	IsMatch(message string) bool
}

func NewUcellTemplate

func NewUcellTemplate(tpls ...string) UcellTemplate

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL