我正在搜索表格,所以我希望用户输入任何包含字母数字和单词之间空格的单词或字符串。
我想在搜索栏中允许字母数字和空格,但到目前为止我还没有成功。我曾在Google上进行过研究,以找到可以帮助我完成此任务的内容,但到目前为止还没有运气。我需要您的帮助,如何为preg_match
编写正则表达式
所以我在这里要做的是替换不是0-9 a-z A-Z的任何字符,并用“”
$searchq = mysql_prep(urldecode($_GET['q']));
$searchq = preg_replace("#[^0-9a-z\s+]#i", "", $searchq);
编辑: 在深入了解正在发生的事情和我想要实现的目标之后,我发现问题出在我的查询中,而不是我的正则表达式! 如果用户输入名字和姓氏,例如John Doe,我希望搜索结果与John doe从数据库中取回!因此,在我如何使此目标可实现的问题上,我需要您的帮助,我有2列,第一个列为“ first_name”,而第一个列为“ last_name”
这是我的查询:
$query_search2 = "SELECT * FROM users_table WHERE first_name LIKE '%$searchq%' OR last_name LIKE '%$searchq%' OR username LIKE '%$searchq%' OR first_name LIKE '%$searchq%' AND last_name LIKE '%$searchq%'";
答案 0 :(得分:1)
您可以使用以下正则表达式,无论大小写如何,该表达式都将查找所有字母。 A-Z,a-z,0-9,包含制表符和下划线的空白。
正则表达式:'(?:\ w + | \ s +){1,}'
如果您不想捕获下划线,则可以使用以下内容:
正则表达式:'([[A-Za-z0-9] + | \ s +){1,}'
答案 1 :(得分:0)
我设法找到的解决方案是: 用于我使用的正则表达式:
$searchq = preg_replace("/[^A-Za-z0-9\s ]/", "", $searchq);
对于查询,我使用了这个:
// ut is the designation of the users_table which we define ourselves
$query_search2 = "SELECT * FROM users_table ut WHERE CONCAT(ut.first_name, ' ', ut.last_name) LIKE '%$searchq%'";
答案 2 :(得分:0)
您需要按以下方式更新查询。您此处的正则表达式文本需要替换为您要使用的正则表达式。希望对您有所帮助,如果不能解决,请恢复原状。
SELECT *从USER_TABLE的REGEXP_LIKE(名字,“您的正则表达式在这里”)或REGEXP_LIKE(名字,“您的正则表达式在这里”)或REGEXP_LIKE(用户名,“您的正则表达式在这里”);如果您在查询中使用正则表达式变量,请打印查询并确保查询正确生成。
根据需要使用正则表达式。--> 您可以使用以下正则表达式,无论大小写如何,它都将查找所有字母。 A-Z,a-z,0-9,包含制表符和下划线的空白。
正则表达式:'(?:\ w + | \ s +){1,}'
如果您不想捕获下划线,则可以使用以下内容:
正则表达式:'([[A-Za-z0-9] + | \ s +){1,}