正则表达式更改用户输入

时间:2009-04-27 08:49:05

标签: php sql regex search

我正在搜索我的数据库。如果用户输入例如。 “foo bar”我想显示同时包含“foo”和“bar”的行。

我的SQL语法如下所示: SELECT * FROM t1 WHERE MATCH(t1.foo_desc,t2.bar_desc)AGAINST('+ foo * + bar *')

如何使用PHP中的正则表达式将用户输入“foo bar”更改为“+ foo * + bar *”?

5 个答案:

答案 0 :(得分:2)

$match = '+' . implode('* +', explode(' ', $input)) . '*';

这假设输入不是空字符串;

编辑:正如@Bart S指出的那样,str_replace(或mb_str_replace,如果你正在处理多字节字符)会更简单......

$match = '+' . str_replace(' ', '* +', $input) . '*';

答案 1 :(得分:1)

您应该使用\b\B来识别单词/非单词边界,从而插入您的+ / *。

答案 2 :(得分:1)

首先,修剪用户输入并删除任何奇怪的内容(标点符号,引号,基本上所有"\W",当然除了空格之外)。

然后,替换:

(?<=\w)\b

"*"

\b(?=\w)

"+"

答案 3 :(得分:1)

对于那些对MATCH感兴趣的人...如果您之前没有使用过它,那么语法This article是一个不错的起点。

答案 4 :(得分:0)

我会使用正则表达式来替换* +之间的两个单词之间的空格:

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

修改基本上这是what Tomalak said的实施,只有\s而不是\W