Простая регулярка
Здравствуйте!
Редко сталкиваюсь с регулярными выражениями и всегда это проблема для меня!( Такой вот вопрос: Пользователь должен ввести название бренда и в скобках страну, например: TOYOTA (Япония) или ВАЗ (Россия). Помогите с регулярным выражением, как проверить верно ли введено значение!? |
Да их не так и много, производителей авто, удобнее не вводить, а предлагать выбор из списка.
|
У меня там ajax автокомплит, с полем удобно то, что всегда можно предложить свой вариант!
|
И что, проверять это рег. выражениями. Как вы себе это представляете? Ведь при этом в паттерне нужно прописать все эти бренды, хотя можно сравнивать по наличию элемента в массиве, но который тоже должен быть описан. А если новое, предложенный вариант, то как узнать верный ли он, с чем его сравнивать?
Без обиды, но это называется маяться дурью. Для кого это и кто хранит эти бренды, ваш автокомплит или же все-таки сервер? |
Мне нужно только чтобы пользователь правильно указал формат, "название (страна)", а проверять правильно ли он написал или "sdfsdfsf (addasda)" не нужно!
|
Каким образом? Я напишу STRING (Тобаго) - это будет правильно?
PS. Проверить наличие () и пробелов в строке рег. выражением не проблема, но зачем, и не проще ли добавление нового это бренд и страна как отдельные поля? Если это ради помещения такого в базе, значит данные о брендах в базе имеют не лучшее отображение, а наихудшее. |
Цитата:
Как вариант... var str='TOYOTA (Япония)'; alert(ok(str)); str='NISSAN (Япония)'; alert(ok(str)); str='ВАЗ (Россия)'; alert(ok(str)); str='УАЗ (Россия)'; alert(ok(str)); function ok(Str) { var re=/^(((TOYOTA|NISSAN)\s\(Япония\))|((ВАЗ|УАЗ)\s\(Россия\)))$/; return re.test(Str); }; |
Цитата:
var str='TOYOTA (Япония)'; alert(ok(str)); str='NISSAN (Япония)'; alert(ok(str)); str='ВАЗ (Россия)'; alert(ok(str)); str='УАЗ (Россия)'; alert(ok(str)); function ok(Str) { var re=/^.+\s\(.+\)$/; return re.test(Str); }; |
var re=/^.+\s\(.+\)$/;
Не пойдет такое, тогда брендом и страной может быть все, что угодно, хотя бы уж буковки одни, и то куда ни шло. ) |
Ладно уговорили!) Нашел список производителей, забью его в бд и сделаю select!
Спасибо! |
Уговорил... :) Это так обязательно нужно делать, без уговоров, и бред, и страна, это разные поля SQL таблицы, ни коем случае как БРЕНД (Страна)! И каждая запись, это уникальный идентификатор!
|
Цитата:
|
>Сделай другое...
Зачем? Ну нельзя так поступать с данными, это хуже "костыля" в JS. ) |
Цитата:
|
Для понту :lol:
|
если иномарки вводяться только на латинице, то можно так
<html> <head> <meta charset="windows-1251" /> </head> <body> <input id="brand" /> <input id="country" /> <button id="b">купить</button> <script> b.onclick=function(){ /^\w+$/.test(brand.value)&&/^россия$/i.test(country.value) ? alert("no") : alert("ok") } </script> </body> </html> Иначе, придется составлять таблицу. |
Мужики, не надо никаких рег, а таблица (только не одна а две со связью по третьей внешней) должна быть SQL.
|
Цитата:
Сойдет и так ![]() |
Не сойдет, подумай, почему? ;)
|
laimas, ты у нас мыслитель, т.ч. начинай рассказывать... :D
|
А что рассказывать, если бы эти таблицы существовали сами по себе, тогда да, претензий нет, но ведь на эти таблицы будут ссылаться записи, в которых и описаны бренды/страны, и это могут быть отношения как многие к одному. Вот чтобы связать эти отношения таблицы записей с таблицами Бред<->Страна и нужна внешняя таблица связей между ними. :)
|
Цитата:
|
А я, как Диоген из бочки :), предлагаю сделать выборку записей в которых есть бренды А, Б и В, и/или страны А, Г и М.
|
Цитата:
Третья таблица будет нужна если данные в полях "Название" лишаться уникальности в пределах своих таблиц, чего у Тса и не предвидеться... Если это не так - пусть он об этом напишет. :) |
Бесспорно, но вопрос в том какой кровью это осуществляется. ;)
А если я упрощу условие и предложу вам сделать выборку только по стране/странам? В этом случае выборка с вашим представлением данных станет проще или нет? |
Цитата:
Select * From таблица_брендов Where Код_страны IN( Select id From таблица_стран Where Название_страны IN('страна1','страна2', ...) ) |
Повторюсь...
Цитата:
|
Select
* From таблица_брендов Where Код_страны IN( Select id From таблица_стран Where Название_страны IN('страна1','страна2', ...) ) Не пойдет, это выборка из таблицы брендов, а не из таблицы ссылающейся на указанные страны. В том то и проблема - как выгоднее построить связи, а это да, зависит от задач работающих с ними. |
Цитата:
|
SELECT * FROM table_brand as br LEFT JOIN table_country AS cn ON cn.id=br.codeCountry laimas, далее делай любые условия... Указывай любую последовательность столбцов... |
Не надо мне рассказывать о JOIN :)
Это совсем не тот запрос, о котором я говорил. Вы постоянно имеете в виду некую базу исключительно о странах и брендах. Если так, то ваших таблиц и запросов достаточно. На практике же все гораздо сложнее, и очередной ваш запрос совсем не о том, что я имел ввиду. |
Цитата:
|
Цитата:
|
Пример, да пожалуйста. Есть СТО или магазины авто, которые могут обслуживать/продавать различные модели авто. С вашими двумя таблицами уже никак, нужна внешняя таблица связей. А если она есть, нафига же я буду связывать бренды со странами так как у вас? Это просто не выгодно.
|
Цитата:
Смело предположу, что у него нет ВАЗов (иже сними) из другой страны, кроме "Россия", равно как и нет TOYOTA (иже сними) кроме как из "Япония"... Напоминаю так же, что все мои примеры сделаны не для какой-то абстрактной, сложной, жизненной задачи, а для ТСа онли... :) Т.ч. либо примеры по проблеме ТСа... Либо все бесполезная переписка... |
Что у него я не знаю, сказать не могу. Вы совсем не поняли. СТО может обслуживать к пример ВАЗ, Тойета, Мазда, а то что первое никак не принадлежит Японии, так это и ежу известно. Вот только связать с вашими таблицами эти модели с СТО никак не получится без внешней таблицы связей.
|
Часовой пояс GMT +3, время: 08:09. |