From 784dda03fda215018eef791da6ba5d1cce316dd9 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 23 Oct 2022 19:05:17 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B1=D0=B0=D0=B3=D0=BE=D0=B2=20=D0=BF=D0=BE=D0=B8?= =?UTF-8?q?=D1=81=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Search/Search.vue | 7 ++++--- server/core/DbSearcher.js | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue index 5413311..9340b4b 100644 --- a/client/components/Search/Search.vue +++ b/client/components/Search/Search.vue @@ -1124,6 +1124,7 @@ class Search { const s = this.search; const emptyFieldValue = '?'; + const maxUtf8Char = String.fromCodePoint(0xFFFFF); const ruAlphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; const enAlphabet = 'abcdefghijklmnopqrstuvwxyz'; const enru = new Set((ruAlphabet + enAlphabet).split('')); @@ -1151,7 +1152,7 @@ class Search { if (searchValue[0] == '=') { searchValue = searchValue.substring(1); - return bookValue == searchValue; + return bookValue.localeCompare(searchValue) == 0; } else if (searchValue[0] == '*') { searchValue = searchValue.substring(1); @@ -1163,8 +1164,8 @@ class Search { } else if (searchValue[0] == '?') { return bookValue == '' || bookValue.indexOf(searchValue) == 0; } else { - - return bookValue.indexOf(searchValue) == 0; + //where = `@dirtyIndexLR('value', ${db.esc(a)}, ${db.esc(a + maxUtf8Char)})`; + return bookValue.localeCompare(searchValue) >= 0 && bookValue.localeCompare(searchValue + maxUtf8Char) <= 0; } }; diff --git a/server/core/DbSearcher.js b/server/core/DbSearcher.js index f186a2e..78cdba4 100644 --- a/server/core/DbSearcher.js +++ b/server/core/DbSearcher.js @@ -45,7 +45,7 @@ class DbSearcher { a = a.substring(1); where = `@indexIter('value', (v) => { const enru = new Set(${db.esc(enruArr)}); - return !v || (!enru.has(v[0].toLowerCase()) && v.indexOf(${db.esc(a)}) >= 0); + return !v || (!enru.has(v[0]) && v.indexOf(${db.esc(a)}) >= 0); })`; } else { where = `@dirtyIndexLR('value', ${db.esc(a)}, ${db.esc(a + maxUtf8Char)})`;