|
|
|||||
вопрос про ereg
Всем здрасьте.
Может кто сталкивался с такой проблемой: надо сделать проверку на частичное совпадение 2х переменных. Например есть $a='123'. Надо чтобы зафиксировалось совпадение с $b, и если $b меньше $a (напр. $b='1'), и если $b больше $a (при $b='12345'). В php4 эта задача решалась легко - if (ereg($a, $b) || ereg($b, $a)) { сделать то-то; } А в php5 возникает ошибка: Warning: ereg() [function.ereg]: REG_BADRPT Чего делать?? |
|
|||||
Регистрация: Jun 2000
Адрес: $_SERVER['REMOTE_ADDR']
Сообщений: 854
|
Судя по примеру, функция ereg здесь вообще не применима, не понятно как она работала раньше... Постарайся по-точнее сформулировать задачу, ибо первый аргумент в ereg вовсе не переменная, а регулярное выражение, шаблон для поиска совпадения во втором аргументе.
Если сравнивается количество знаков переменных, подойдет функция strlen...
__________________
X |
|
|||||
Почему не применима ф-ция ereg? Может ведь на месте первого аргумента вместо регулярного выражения стоять переменная, если эта функция используется в цикле.
Сравнивать нужно именно значения, а не число символов. Опишу задачу более конкретно, может это внесет ясность. Есть список телефонов, среди которых производится поиск. в списке номера представлены как с кодом города, так и без него. В поисковую форму могут вноситься тоже номера и с кодом, и без кода. И если в базе есть номер скажем 123123, то он должен найтись и если в форму будет вбито 123123, и если (495)123123. Так понятнее? |
|
|||||
Регистрация: Jun 2000
Адрес: $_SERVER['REMOTE_ADDR']
Сообщений: 854
|
Да, так понятнее... А в базе номера в одном формате, или дефизов ещё может несколько быть в разных местах?
__________________
X |
|
|||||
всякие дефисы, пробелы и скобочки удаляются, сравнивать нужно только наборы цифр
|
|
|||||
for the lulz
|
Тогда не проще будет отрезать substr'ом последние семь цифр и сравнивать их? Всяко пошустрее должно работать, чем регэкспы.
__________________
Jan tan ma pi pona tawa ma ale. |
|
|||||
bunker6, а это такая хитрая база, в которой кроме внешних телефонов содержатся и внутренние, состоящие только из 3х цифр
|
|
|||||
ну так проверяй еще и длину) и что мешает использовать LIKE?
Последний раз редактировалось Samodelkin; 25.07.2006 в 20:21. |
|
|||||
for the lulz
|
Цитата:
__________________
Jan tan ma pi pona tawa ma ale. |
|
|||||
Samodelkin, да видимо придется длину проверять. Эх, надеялась, что можно легким движением руки с eregом что-то сделать. Тем более, что в php4 это получалось.
Щас постараюсь объяснить почему LIKE не получается использовать. В базе телефоны хранятся со всеми черточками и скобками. Для успешного сравнения надо избавиться от всех лишних символов. В введенном пользователем номере это просто, а с базовым возникают проблемы. Получается такая примерно штука: SELECT * FROM BASE WHERE PHONE LIKE '123123'; Если PHONE будет выглядеть как 12-31-23 или 123-123, то он по этому запросу не найдется. Надеюсь не очень запутанно объяснила bunker6, 1 - в запросе ведь может содержаться больше цифр, чем в базе. в этом и была основная загвоздка. 2 - задача поставлена именно так. |
Часовой пояс GMT +4, время: 21:34. |
|
« Предыдущая тема | Следующая тема » |
|
|