Асосий қисмга ўтиш
yangiça

2 дақиқа ўқишга

Янги ҳарфлар билан қидирув ва саралаш: дастурчилар учун изоҳ

Ислоҳот матнни ўзгартирди, демак у базани, қидирувни ва саралашни ҳам ўзгартирди. Қуйида — деярли ҳамма дуч келадиган тўртта хато.

Қидирув ҳеч нарса топмайди

Базада Toshkent, фойдаланувчи Toşkent деб ёзади — мос келиш нолга тенг. Ечим битта: солиштиришдан олдин сўровни ҳам, индексни ҳам битта шаклга келтиринг. Қайси бирига — муҳим эмас, муҳими иккаласига бир хил.

Саралаш нотўғри ишлайди

Одатий саралашда ö ва ğ z дан кейин кетади, чунки уларнинг код рақами каттароқ. JavaScriptда Intl.Collator("uz-Latn"), PostgreSQLда COLLATE "uz-Latn-x-icu" керак бўлади.

Туркча i

Янги ҳарфлар турк алифбосида ҳам бор, шунинг учун tr локалини «ўхшаш» деб олиш васвасаси пайдо бўлади. Олманг: турк локалида "i".toUpperCase() İ беради, ўзбекчада эса I керак. Фақат uz ёки локалсиз.

Unicode нормализацияси

ö битта кодпоинт бўлиб ҳам, o ва қўшилувчи белги бўлиб ҳам келади — иккинчиси macOS файллари учун одатий ҳол. Кирувчи матннинг ҳаммасини normalize("NFC") орқали ўтказинг, акс ҳолда бир хил кўринадиган икки қатор тенг бўлмай қолади.

Апострофлар

Одамлар ', ’, `, ʻ ва ʼ — ҳаммасини ёзади. Қабул қилишда биттасига келтиринг, чиқаришда эса доим ʼ (U+02BC) кўрсатинг.