搜索不符合正则表达式的空白


Search for whitespaces failing Regex

所以我试图将空格包含到我的搜索字符串中,这是使用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 . "%'";