Вход

Просмотр полной версии : [работа со строками] Спасайте.. не могу сообразить..


V2oD2o
11.07.2012, 10:41
есть например артикул товара: LUXLITE 8A5 98 77.14-22
обычно люди ищут по артикулу сразу без указания производителя, но! иногда у производителей совпадают артикулы и получается каша..

например запрос 8A5 98 77.14-22 - режем .replace(/[/\s/.,!?;]*/g, '') и ищем по базе..

оно выдаст например LUXLITE и JASONS, как в строке отловить что 2 первые буквы в строке идут друг за другом?

т.е. LUXLITE 8A5 98 77.14-22 - как отловить LU, и точно знать что это буквы, а не цифры? :-E

Deff
11.07.2012, 11:29
var str='LUXLITE 8A5 98 77.14-22';
var X='LU' //Тестовая подстрока
var Test ='/'+X+'/gm';
var OutNumSumb = str.search(eval(Test)); //Ищем index Первого вхождения Подстроки в тестируемом контенте(номер символа от начала
alert(OutNumSumb)

Deff
11.07.2012, 11:31
т.е. LUXLITE 8A5 98 77.14-22 - как отловить LU, и точно знать что это буквы, а не цифры?
Приведите еще пяток примеров -мало инфы и по ходу Вопрос полностью не исчерпан

V2oD2o
11.07.2012, 11:54
Приведите еще пяток примеров -мало инфы и по ходу Вопрос полностью не исчерпан

Спасибо что отозвался)

ну суть в чем..
пользователь вводит в строку поиска 8A5 98 77.14-22, режем и по базе ищем - 8A598771422, вываливаем:
LUXLITE 8A5 98 77.14-22
JASONS 8.A598-77142.2

пользователь должен ткнуть лишний раз чтоб выбрать именно то что ему надо.. вот это дело - надо убить..

идея какая.. судя по человеческой логике что делаем? пишем в строку поиска сразу "LUXLITE 8A5 98 77.14-22".. значит что я хочу сделать, взять 2 первых символа - проверить - если буквы то копировать часть строки до пробела - в 90% случаев это и будет бренд артикула, сделать выборку в бд по способу выше, но вывалить только тот что с брендом LUXLITE..

вот. а если артикул еще короче этого? например "8857"..
что видим?:
ASB 8857
LUXE 8857
KAKA 8857
DIXY 5587
TRATATA 5587

берем "TRATATA 5587" - проверяем "TR" = буквы, копируем "TRATATA" - фильтруем, видим:
TRATATA 5587

ну, я думаю суть проблемы донес, зачем мне это :)

lord2kim
11.07.2012, 12:02
Спасибо что отозвались ребят..

ну суть в чем..
пользователь вводит 8A5 98 77.14-22, режем и по базе ищем - 8A598771422, вываливаем:
LUXLITE 8A5 98 77.14-22
JASONS 8.A598-77142.2

пользователь должен ткнуть лишний раз чтоб выбрать именно то что ему надо.. вот это дело - надо убить..

ну и выводите ему сразу LUXLITE

V2oD2o
11.07.2012, 12:07
а откуда я знаю что ему надо LUXLITE если он ввел лишь только артикул.. с учетом того что LUXLITE это например под этим артикулом - мешок риса, а JASONS это яд для крыс..

lord2kim
11.07.2012, 12:14
а откуда я знаю что ему надо LUXLITE если он ввел лишь только артикул.. с учетом того что LUXLITE это например под этим артикулом - мешок риса, а JASONS это яд для крыс..

выводите первым что нибудь популярнее, на пример, а потом список остального, тут уже вы не виноваты, что артикулы практически одинаковые...

nerv_
11.07.2012, 12:19
LUXLITE 8A5 98 77.14-22 - как отловить LU, и точно знать что это буквы, а не цифры?
var text = 'LUXLITE 8A5 98 77.14-22';

alert( /^[A-Z]{2,}/.exec( text ) );

Deff
11.07.2012, 12:48
V2oD2o,
Составьте массив Выбора

Arraychoice = new Array(
"LUXLITE 8A5 98 77.14-22",
"JASONS 8.A598-77142.2",
"И т.д."
)
Далее ищите по Введенной Пользователем подстроки по массиву и заменяете его запись, - на полную,
Регулярки серьезной даже не надо, - нужно ток отформатировать введенную строку -убрать из введенной строки пробелы и вставить заново стандартным макаром(1 пробел меж словами далее поиск через indexOf

V2oD2o
11.07.2012, 12:58
var text = 'LUXLITE 8A5 98 77.14-22';

alert( /^[A-Z]{2,}/.exec( text ) );

ВОТ! :D

V2oD2o
11.07.2012, 14:26
затык какой то..


function UpdateMainFrame(action,art) {
var brandart=/^[A-Z]{2,}/.exec(art.toUpperCase());
show('show_loading');
if (brandart!=null) {
action='get_art_and_brand';
art=brandart+"^"+art.slice(brandart.length-1);
alert(brandart.length);
}


почему brandart содержит ABCDEF - а alert выдает еденицу???

V2oD2o
11.07.2012, 15:02
тоже починился, туплю просто:
brandart.toString().length;