所以我试图在我的搜索字符串中包含空格我不熟悉使用正则表达式,所以我只需要一点指导:
if(preg_match("/^[A-Za-z]+(\s[A-Za-z]+)*$/", $_POST['name'])){
我知道\s
是为我提供的,但我只能搜索没有字符的字符串?
if (preg_match("^(?i)[a-z\s]+$", $_POST['name'])) {
$name = $_POST['name'];
$q = "SELECT *
FROM users
WHERE first_name
LIKE '%" . $name . "%'
OR last_name LIKE '%" . $name ."%' OR email LIKE '%" . $name ."%'";
$r = mysqli_query($dbc, $q);
while($row = mysqli_fetch_array($r)) {
$FirstName = $row['first_name'];
$LastName = $row['last_name'];
$Email = $row['email'];
$Extension = $row['extension'];
$ID = $row['user_id'];
echo "<ul>\n";
echo "<li>" .$FirstName . " " . $LastName . " " . $Email . " " . $Extension . "</a></li>\n";
echo "</ul>";
}
}
答案 0 :(得分:1)
所以你的当前进程正则表达式是正确的你的SQL不是。假设你有$name = 'john smith';
。将其放入您的查询中,看看会发生什么。
SELECT *
FROM users
WHERE first_name
LIKE '%john smith%'
OR last_name LIKE 'john smith%' OR email LIKE '%john smith%'
名字与john smith
不同,姓氏不像john smith
,电子邮件不像john smith
。
名字可能类似john
,姓氏可能类似smith
。所以也许在白色空间上分开。因此,您可以看到没有找到匹配项
无论如何
if(preg_match('/^(?i)[a-z\s]+$/', $_POST['name'])){
是对的。
更新
这个答案的改编,MySQL select with CONCAT condition,我认为这将是最好的方法。
$q = "SELECT *
FROM users
WHERE CONCAT(first_name, ' ', last_name)
LIKE '%" . $name . "%' or email LIKE '%" . $name . "%'";