Регулярное выражение для изменения пользовательского ввода - PullRequest
0 голосов
/ 27 апреля 2009

Я выполняю поиск в моей базе данных. Если пользователь вводит, например. "foo bar" Я хочу отобразить строки, которые имеют как "foo", так и "bar".

Мой синтаксис SQL выглядит так: ВЫБЕРИТЕ * ОТ t1 ГДЕ МАТЧ (t1.foo_desc, t2.bar_desc) ПРОТИВ ('+ foo * + bar *')

Как я могу изменить пользовательский ввод "foo bar" на "+ foo * + bar *", используя регулярное выражение в PHP?

Ответы [ 5 ]

2 голосов
/ 27 апреля 2009
$match = '+' . implode('* +', explode(' ', $input)) . '*';

Предполагается, что ввод не является пустой строкой;

Редактировать: как указывает @Bart S, str_replace (или mb_str_replace, если вы имеете дело с многобайтовыми символами) будет еще проще ...

$match = '+' . str_replace(' ', '* +', $input) . '*';
1 голос
/ 28 апреля 2009

Для тех, кто интересуется синтаксисом MATCH ... ПРОТИВ Эта статья является хорошей отправной точкой, если вы ее еще не использовали.

1 голос
/ 27 апреля 2009

Сначала обрежьте пользовательский ввод и удалите что-нибудь странное (знаки препинания, кавычки, в основном все "\W", кроме пробелов, конечно).

Затем подставьте:

(?<=\w)\b

с

"*"

и

\b(?=\w)

с

"+"
1 голос
/ 27 апреля 2009

Вы должны использовать \b и \B, чтобы определить границы слова / не слова, и, таким образом, вставить свой + / *.

0 голосов
/ 28 апреля 2009

Я бы использовал регулярное выражение для замены пробелов между двумя словами на * +:

'+' . preg_replace('/\s+/', '* +', trim($input)) . '*'

Редактировать По сути это реализация , что Томалак сказал просто с \s вместо \W.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...