所以我试图将空格包含到我的搜索字符串中,这是使用Regex的新方法,所以我只需要一点指导:
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>";
}
}
所以你当前的进程正则表达式是正确的,你的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条件,我认为是最好的方法。
$q = "SELECT *
FROM users
WHERE CONCAT(first_name, ' ', last_name)
LIKE '%" . $name . "%' or email LIKE '%" . $name . "%'";